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
