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.
- 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.
 
- 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
Utilització Bàsica de GDB
- Compilar el programa amb informació de depuració:
gcc -g -o programa programa.c - Iniciar GDB:
gdb programa - 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;
}
- 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
Utilització Bàsica de Valgrind
- Exercicis Pràctics
 
Exercici 1: Depuració amb GDB
- Escriu un programa C que contingui un error lògic.
 - Compila el programa amb l'opció 
-g. - 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;
}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
- Escriu un programa C que contingui una fuita de memòria.
 - 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 identificarà que la memòria no s'allibera. Corregeix el codi afegint free(arr); abans de return 0;.
- 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
- Introducció a la Programació
 - Configuració de l'Entorn de Desenvolupament
 - Programa Hello World
 - Sintaxi i Estructura Bàsiques
 
Mòdul 2: Tipus de Dades i Variables
Mòdul 3: Flux de Control
Mòdul 4: Funcions
- Introducció a les Funcions
 - Arguments de Funció i Valors de Retorn
 - Àmbit i Durada de les Variables
 - Funcions Recursives
 
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
- Introducció a la Gestió d'Arxius
 - Lectura i Escriptura d'Arxius
 - Posicionament d'Arxius
 - Gestió d'Errors en Operacions d'Arxius
 
Mòdul 10: Temes Avançats
- Directives del Preprocessador
 - Arguments de Línia de Comandes
 - Llistes d'Arguments Variables
 - Multifil en C
 
Mòdul 11: Millors Pràctiques i Optimització
- Llegibilitat del Codi i Documentació
 - Tècniques de Depuració
 - Optimització del Rendiment
 - Consideracions de Seguretat
 
