La depuració és una habilitat essencial per a qualsevol programador. En aquest tema, explorarem diverses tècniques i eines que poden ajudar-te a identificar i corregir errors en el teu codi C. Aprendrem a utilitzar depuradors, a inserir missatges de depuració i a aplicar tècniques sistemàtiques per trobar i solucionar problemes.

  1. Introducció a la Depuració

Què és la Depuració?

La depuració és el procés de trobar i corregir errors (bugs) en el codi. Els errors poden ser de diversos tipus, com ara errors de sintaxi, errors lògics, errors de temps d'execució, etc.

Tipus d'Errors

  • Errors de Sintaxi: Errors en la forma en què el codi està escrit.
  • Errors Lògics: Errors en la lògica del programa que fan que no es comporti com s'esperava.
  • Errors de Temps d'Execució: Errors que es produeixen durant l'execució del programa, com ara divisions per zero o accés a memòria no vàlida.

  1. Eines de Depuració

Depuradors (Debuggers)

Els depuradors són eines que permeten executar el codi pas a pas, inspeccionar variables i veure el flux d'execució del programa. Un dels depuradors més utilitzats per a C és GDB (GNU Debugger).

Instal·lació de GDB

sudo apt-get install gdb

Utilització Bàsica de GDB

  1. Compilar el programa amb informació de depuració:
    gcc -g -o programa programa.c
    
  2. Iniciar GDB:
    gdb programa
    
  3. Comandes Bàsiques de GDB:
    • break [funció/linia]: Estableix un punt de ruptura.
    • run: Executa el programa.
    • next: Executa la següent línia de codi.
    • step: Entra dins de les funcions.
    • print [variable]: Mostra el valor d'una variable.
    • continue: Continua l'execució fins al següent punt de ruptura.

Missatges de Depuració

Inserir missatges de depuració en el codi pot ajudar a entendre el flux d'execució i a identificar on es produeixen els errors.

Exemple de Missatges de Depuració

#include <stdio.h>

int main() {
    int a = 5;
    int b = 0;
    printf("Abans de la divisió\n");
    if (b != 0) {
        int c = a / b;
        printf("Resultat: %d\n", c);
    } else {
        printf("Error: Divisió per zero\n");
    }
    printf("Després de la divisió\n");
    return 0;
}

  1. Tècniques Sistemàtiques de Depuració

Dividir i Conquerir

Divideix el codi en parts més petites i comprova cada part per separat per identificar on es produeix l'error.

Reproduir l'Error

Intenta reproduir l'error de manera consistent. Això pot ajudar a identificar les condicions específiques que causen el problema.

Revisió de Codi

Revisa el codi amb un company o utilitza eines de revisió de codi per identificar possibles errors.

Utilitzar Valgrind per a la Depuració de Memòria

Valgrind és una eina que ajuda a detectar errors de gestió de memòria, com ara fuites de memòria.

Instal·lació de Valgrind

sudo apt-get install valgrind

Utilització Bàsica de Valgrind

valgrind --leak-check=full ./programa

  1. Exercicis Pràctics

Exercici 1: Depuració amb GDB

  1. Escriu un programa C que contingui un error lògic.
  2. Compila el programa amb l'opció -g.
  3. Utilitza GDB per identificar i corregir l'error.

Solució

#include <stdio.h>

int main() {
    int a = 5;
    int b = 10;
    int c = a + b; // Error lògic: hauria de ser a * b
    printf("Resultat: %d\n", c);
    return 0;
}
gcc -g -o programa programa.c
gdb programa

Utilitza les comandes de GDB per identificar que l'error és a la línia int c = a + b; i corregeix-lo a int c = a * b;.

Exercici 2: Depuració de Memòria amb Valgrind

  1. Escriu un programa C que contingui una fuita de memòria.
  2. Utilitza Valgrind per identificar i corregir la fuita de memòria.

Solució

#include <stdlib.h>

int main() {
    int *arr = (int *)malloc(10 * sizeof(int));
    // Fuita de memòria: no s'allibera la memòria
    return 0;
}
valgrind --leak-check=full ./programa

Valgrind identificarà que la memòria no s'allibera. Corregeix el codi afegint free(arr); abans de return 0;.

  1. Resum

En aquesta secció, hem après diverses tècniques de depuració, incloent l'ús de depuradors com GDB, la inserció de missatges de depuració i l'ús d'eines com Valgrind per detectar errors de memòria. La depuració és una habilitat crucial que requereix pràctica i paciència, però amb les eines i tècniques adequades, pots identificar i corregir errors de manera eficient.

Curs de Programació en C

Mòdul 1: Introducció al C

Mòdul 2: Tipus de Dades i Variables

Mòdul 3: Flux de Control

Mòdul 4: Funcions

Mòdul 5: Arrays i Strings

Mòdul 6: Punteres

Mòdul 7: Estructures i Unions

Mòdul 8: Assignació Dinàmica de Memòria

Mòdul 9: Gestió d'Arxius

Mòdul 10: Temes Avançats

Mòdul 11: Millors Pràctiques i Optimització

Mòdul 12: Projecte i Avaluació Final

© Copyright 2024. Tots els drets reservats