fisica:informatica:201516:primoanno:esercitazione7.2
Esercitazione debugging
I lucidi introduttivi per il debugging. Eseguire con i debugger ddd e/o gdb e trovare il problema nei seguenti programmi.
Esercizio 1: Aggiornamenti
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <time.h> #define N 5 /* globali */ int z[N+1]; int a[N-1]; int i; void aggiorna (int k); int main(void) { srand(time(NULL)); i=0; while (i<N) { aggiorna(i); printf("iterazione %d\n",i); i++; } printf("exiting ...\n"); return 0; } void aggiorna (int k) { a[k]=rand()%2; z[k+1]=a[k]; }
in pratica il codice, salvato in “file.c” compilato con
gcc -Wall -pedantic -o ese file.c
ed eseguito con
$ ./ese
va inspiegabilmente in ciclo all'interno del ciclo. Per eseguire in modalita' interattiva di debugging:
- Compilare con opzione “-g”, ad esempio
gcc -Wall -pedantic -g -o ese file.c
- lanciare l'eseguibile usando il debugger come in
$ ddd ./ese
* oppure in
$ gdb ./ese
a questo punto e' possibile fermare il programma durante la sua esecuzione, ispezionare le variabili etc..
Esercizio 2: Debuggare codice altrui ...
Per i solutori piu' che abili. Trovare l'errore…
#include<stdio.h> #include<string.h> void leggi( char *[]); void stampa(char *[], int); int main() { char *a[3]={"alberello","rosea","roma"}; char *b = NULL; leggi(a); return 0; } void stampa(char *arch[],int sizeA) { int i; printf("i loro indirizzi sono:\n"); for(i=0;i<sizeA;i++) printf("%p\n",(void*)&arch[i]); } void leggi(char *archivio[]){ int i; int size=strlen(*archivio); for(i=0;i<size;i++) printf("%s\n",archivio[i]); stampa(archivio, size); }
fisica/informatica/201516/primoanno/esercitazione7.2.txt · Ultima modifica: 19/04/2016 alle 16:09 (9 anni fa) da Susanna Pelagatti