• Non ci sono risultati.

Università degli Studi di Udine

N/A
N/A
Protected

Academic year: 2021

Condividi "Università degli Studi di Udine"

Copied!
10
0
0

Testo completo

(1)

FONDAMENTI DI INFORMATICA

Prof. PIER LUCA MONTESSORO Ing. DAVIDE PIERATTONI

Facoltà di Ingegneria

Università degli Studi di Udine

Linguaggio C

Debugging

(2)

inclusi, ma non limitatamente, ogni immagine, fotografia, animazione, video, audio, musica e testo) sono di proprietà degli autori prof. Pier Luca Montessoro e ing. Davide Pierattoni, Università degli Studi di Udine.

Le slide possono essere riprodotte ed utilizzate liberamente dagli istituti di ricerca, scolastici ed universitari afferenti al Ministero della Pubblica Istruzione e al Ministero dell’Università e Ricerca Scientifica e Tecnologica, per scopi istituzionali, non a fine di lucro. In tal caso non è richiesta alcuna autorizzazione.

Ogni altro utilizzo o riproduzione (ivi incluse, ma non limitatamente, le riproduzioni su supporti magnetici, su reti di calcolatori e stampe) in toto o in parte è vietata, se non esplicitamente autorizzata per iscritto, a priori, da parte degli autori.

L’informazione contenuta in queste slide è ritenuta essere accurata alla data della pubblicazione. Essa è fornita per scopi meramente didattici e non per essere utilizzata in progetti di impianti, prodotti, reti, ecc. In ogni caso essa è soggetta a cambiamenti senza preavviso. Gli autori non assumono alcuna responsabilità per il contenuto di queste slide (ivi incluse, ma non limitatamente, la correttezza, completezza, applicabilità, aggiornamento dell’informazione).

In ogni caso non può essere dichiarata conformità all’informazione contenuta in queste slide.

In ogni caso questa nota di copyright e il suo richiamo in calce ad ogni slide non devono

(3)

Debugging

• Ogni programma, a qualunque livello di complessità, è soggetto ad errori di programmazione (“bug”)

• Gli errori lessicali e sintattici vengono rilevati da parte del compilatore, che fornisce all’utente dei messaggi contenenti il numero di riga e il tipo di errore trovato nel sorgente

• Alle volte i messaggi possono recare solo degli avvertimenti (“warning”), senza bloccare la

compilazione: in tale caso è bene rivedere la correttezza semantica delle istruzioni

• Un programma compilato senza “warning” non

garantisce affatto l’assenza di errori!

(4)

• Gli errori di traduzione di un algoritmo nelle

corrispondenti istruzioni in linguaggio C sono spesso difficili da individuare

• È sempre consigliabile:

– verificare la corrispondenza dell’algoritmo con le specifiche richieste al programma

– effettuare un’analisi ragionata del codice “sulla carta”, ripercorrendo mentalmente tutti i passi di programma

– esaminare le espressioni, specialmente quelle di controllo nei cicli iterativi

– controllare l’effettiva allocazione delle variabili e tutte le

operazioni di assegnamento

(5)

Debugging

• La compilazione condizionale offre un supporto molto semplice da usare in fase di debugging

#define DEBUG

int i = 0;

#ifdef DEBUG

printf ("Inizio ciclo while...\n");

#endif

while (i < 100);

{

#ifdef DEBUG

printf ("i vale %d\n", i);

#endif

printf ("Messaggio ripetuto 100 volte\n");

}

Il programma si ferma alla stampa del primo messaggio

qualcosa non va...

(6)

stampa dei valori delle variabili “critiche”

• Questa tecnica aiuta il programmatore a visualizzare i risultati degli step più complessi

• Quando si deve analizzare l’esecuzione dei cicli, è

consigliabile stampare i valori delle variabili usate come contatori → utile nel caso di operazioni sui vettori!

int a[10];

...

for (i = 1; i < 10; i++) {

if (a[i] < 0)

continue;

Non stamperà mai il valore di

a[0], primo elemento del

(7)

Debugging

• Un modo per individuare il “bug” precedente può essere:

#define DEBUG ...

int a[10];

...

for (i = 1; i < 10; i++) {

#ifdef DEBUG

printf (“Ora leggo a[%d]\n”, i);

#endif

if (a[i] < 0)

continue;

printf ("%d\n", a[i]);

}

Ecco l’errore! Ho sbagliato l’inizializzazione del

contatore nel ciclo for!

(8)

• Gli ambienti di sviluppo integrati per il linguaggio C offrono spesso degli strumenti software per il

debugging (debugger)

• Compilando i sorgenti in modo opportuno, è possibile introdurre delle istruzioni specifiche per il debugger

• Esse consentono il blocco dell’esecuzione ad ogni step e la visualizzazione a runtime dei valori di

alcune o tutte le variabili

• È tuttavia consigliabile impiegare il debugger solo nel caso di programmi molto complessi e difficilmente

analizzabili “a occhio nudo”

(9)

Debugger in ambiente GCC

• Compilazione per il debugger:

C:\PROGR> gcc -g -o nome.exe nome.c

• Esecuzione con debugger grafico:

C:\PROGR> insight nome

(10)

Riferimenti

Documenti correlati

request to send 19 data terminal ready 20 signal quality detector 21 ring indicator 22 data signal rate selector 23 transmit clock DTE 24. 1 protective ground 2 transmitted data

© 1999 Pier Luca Montessoro ( si veda la nota a pagina 2) 2 Questo insieme di trasparenze (detto nel seguito slide) è protetto dalle leggi sul copyright e dalle disposizioni

© 1999 Pier Luca Montessoro (si veda la nota a pagina 2) 2 Questo insieme di trasparenze (detto nel seguito slide) è protetto dalle leggi sul copyright e dalle disposizioni dei

© 1999 Pier Luca Montessoro (si veda la nota a pagina 2) 2 Questo insieme di trasparenze (detto nel seguito slide) è protetto dalle leggi sul copyright e dalle disposizioni dei

© 1999 Pier Luca Montessoro ( si veda la nota a pagina 2) 2 Questo insieme di trasparenze (detto nel seguito slide) è protetto dalle leggi sul copyright e dalle disposizioni

© 1999 Pier Luca Montessoro ( si veda la nota a pagina 2) 2 Questo insieme di trasparenze (detto nel seguito slide) è protetto dalle leggi sul copyright e dalle disposizioni

© 1999 Pier Luca Montessoro (si veda la nota a pagina 2) 2 Questo insieme di trasparenze (detto nel seguito slide) è protetto dalle leggi sul copyright e dalle disposizioni dei

© 1999 Pier Luca Montessoro ( si veda la nota a pagina 2) 2 Questo insieme di trasparenze (detto nel seguito slide) è protetto dalle leggi sul copyright e dalle disposizioni