Debugger. Stefano Ferrari. Università degli Studi di Milano Programmazione. anno accademico

Documenti analoghi
Cos'è il Debug? Il debug di un programma è la fase di ricerca e correzione di errori che si manifestano a runtime

Debugger. Marco Alberti Programmazione e Laboratorio, A.A

Lezione 19: Il preprocessore

Unix e comandi di base

Debug di un programma

Debug con GDB. Gennaro Oliva Laboratorio di sistemi operativi 01/06/2007

GDB. The GNU Debugger

gdb: manuale di rapida consultazione

Compilatori. g ++ prog.c. che crea il file eseguibile a.out. È utile conoscere alcune opzioni di g ++

Lab 01 Introduzione a Codelite

Esercitazioni di Fondamenti Informatica - Modulo A 1

Introduzione a GCC: GNU Compiler Collection

NOTE SULL USO DI ECLIPSE per la compilazione di programmi c

Informatica B Esercitazione 2

Fondamenti di Informatica AA 2016/2017

Lesson #10. Final Exercises. Roberto De Virgilio

COSTRUZIONE DI UN APPLICAZIONE

Linguaggio C Debugging

Strumenti integrati Free Software per lo sviluppo

Titolo presentazione Introduzione alla programmazione in C sottotitolo Milano, XX mese 20XX Informatica ed Elementi di Informatica Medica Giuseppe Mas

CORSO DI SISTEMI OPERATIVI A - ESERCITAZIONE 2

PER UTILIZZARE LCC IN LAB

COSTRUZIONE DI UN APPLICAZIONE

DEBUGGING. Ivan Lanese

Costrutti di iterazione

Laboratorio di informatica Ingegneria meccanica

DEBUGGING. Ivan Lanese

2 Lavorare con Eclipse

Lab 01 Introduzione a Codelite

Perché il linguaggio C?

Istruzioni di Controllo

ISTRUZIONI DEVC++ Autore: Luca Florio (luca.florio<at>polimi.it)

Programmazione Procedurale in Linguaggio C++

A.A Laboratorio n 1 Ing. Gian Enrico Conti. Milano, XX mese 20XX

Uso di GCC da riga di comando

Cenni sull'uso dei debugger

FUNZIONI. Ivan Lanese

CORSO DI SISTEMI OPERATIVI A - ESERCITAZIONE 2

ANALIZZIAMO NEI DETTAGLI GLI STATEMENTS DI SELEZIONE E DI RIPETIZIONE FORNITI DAL LINGUAGGIO C STATEMENT SEMPLICE STATEMENT COMPOSTO BLOCCO

Istruzioni condizionali di diramazione in Fortran 90

Laboratorio di Programmazione 1. Docente: dr. Damiano Macedonio Lezione 4 24/10/2013

Espressioni con effetti collaterali

6 - Blocchi e cicli. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Titolo presentazione

Variabile. Variabile. Definizione di variabile. Esempi. x x=4;

Errori di programmazione Università degli Studi di Milano

Octave. Luca Abeni. Informatica Luca Abeni 1 / 21

Fondamenti di Informatica T-1 modulo 2

Funzionalità. Il preprocessore C. Inclusione di file. Inclusione di file

Fondamenti di informatica T-1 (A K) Esercitazione 6: Eclipse

CORSO LINUX PER LA CERTIFICAZIONE LPI ESSENTIALS

Esercitazione E9 Sincronizzazione

Progetto per il Laboratorio di Programmazione Un interprete per il linguaggio PINO. Modulo I: Le tavole dei simboli (TS)

L ambiente UNIX/Linux. Strumenti per la programmazione C Stefano Quer Dipartimento di Automatica e Informatica Politecnico di Torino

Introduzione. Programma didattico

Linguaggi di Programmazione

Fondamenti di Informatica Ing. Biomedica

INTRODUZIONE A VISUAL STUDIO

Errori frequenti Cicli iterativi Array. Cicli e array. Laboratorio di Programmazione I. Corso di Laurea in Informatica A.A.

Laboratorio di trattamento numerico dei dati sperimentali

Fondamenti di Informatica e Laboratorio T-AB Ingegneria Elettronica e Telecomunicazioni. Lab Shell. Lab-Shell 1

Università degli Studi di Verona. Esercizi. Gennaio Sergio Marin Vargas. Dipartimento di Biotecnologie

STRUTTURE DI CONTROLLO DEL C++

Fondamenti di Informatica T-1 CdS Ingegneria Informatica. Introduzione agli ambienti di sviluppo MS Visual Studio 2005/2008/2010 CodeLite 6.1.

Per quanto non specificato in queste indicazioni si rimanda agli altri documenti relativi a questo progetto:

Perché il linguaggio C?

Linguaggio C Strutture di controllo

Prof. Pagani Corrado IL DEBUGDEL SOFTWARE

CORSO DI SISTEMI OPERATIVI A - ESERCITAZIONE 2

Fondamenti di Informatica T-1 modulo 2

INTRO a MS Visual Studio 2008: LINEA di COMANDO

INTRO a MS Visual Studio 2008: LINEA di COMANDO

Elementi di informatica

Esercitazioni di Informatica (CIV)

Primo programma in C

Università degli studi di Roma Tor Vergata Ingegneria Medica Informatica I Programma del Corso

Introduzione alla programmazione

Scelte. Costrutto condizionale. Il costrutto if. Il costrutto if. Rappresentazione con diagramma a blocchi. Il costrutto if

Nuovi tipi di dato e. Alessandra Giordani Lunedì 26 marzo

Sviluppare un programma in FORTRAN

Informatica per Statistica Riassunto della lezione del 21/10/2011

a strange language, shaped as much by history as by design

19 - Eccezioni. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Strutture di Controllo

Calcolo numerico e programmazione Programmazione

Ricorsione. Stefano Ferrari. Università degli Studi di Milano Programmazione. anno accademico

Programmare. Compilatori e interpreti. Editor :: vi. Hello1.c. #include <stdio.h> >> cc Hello1.c. main() { printf( \n Hello World!

Programmare. Definire una sequenza di istruzioni che specificano come effettuare una elaborazione

Laboratorio. Due. 1) Switch 2) Costrutti Iterazione (For, While, do while)

Programmazione di base

Elementi di informatica. Programmare in C

Errori di programmazione

Linguaggio C. strutture di controllo: strutture iterative. Università degli Studi di Brescia. Docente: Massimiliano Giacomin

Elementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I

Fondamenti di Informatica T2 Modulo 2

Transcript:

Debugger Stefano Ferrari Università degli Studi di Milano stefano.ferrari@unimi.it Programmazione anno accademico 2017 2018 Errori sintattici e semantici Gli errori commessi in un programma si dividono in errori sintattici: riguardano la forma del programma forma dei singoli termini (parole chiave, stringhe, variabili,... ) Es.: flot f = 12,43; strcpy(s, c:\prova.txt); regole di composizione delle espressioni (operatori-operandi,... ) Es.: int i; i = prova.txt ; 5 = i; errori semantici: riguardano il significato del programma operazioni con risultato indeterminato Es.: int i, j; i = 0; j = 2 / i; operazioni con risultato diverso da quello desiderato Es.: if (i = 1) printf( i è unitario ); Il compilatore segnala gli errori sintattici Mette solo in guardia contro alcuni possibili errori semantici Es.: if (i = 1)... assignment used as truth value i; statement with no effect Stefano Ferrari Programmazione nnoacc 1

Debugging Se un programma è scorretto sintatticamente, non viene compilato: l eseguibile non si crea semanticamente, viene compilato, ma produce un eseguibile che dà errore in esecuzione (run-time error) termina fornendo il risultato sbagliato Debugger è un programma progettato per aiutare la ricerca e la correzione degli errori semantici di programmazione consente l esecuzione passo per passo del programma consente l interruzione dell esecuzione in posizioni date del programma (breakpoint) ogni volta che determinate espressioni cambiano valore (watchpoint) consente la lettura e modifica delle variabili del programma consente la visualizzazione della pila di sistema del programma GDB GDB (GNU debugger) è fornito col compilatore GCC permette di analizzare programmi scritti in C, C++, Ada e Fortran Gli esempi seguenti si riferiscono tutti al codice sort.c allegato Prima di avviare GDB, bisogna compilare il codice con l opzione -g gcc -g sort.c -o sort.exe Ora si può lanciare il comando gdb, avviando l ambiente di debugging, come si vede dal nuovo prompt sul terminale (gdb) GDB offre una shell interattiva testuale: il comando help mostra i comandi disponibili (gdb) help Stefano Ferrari Programmazione nnoacc 2

Gestione dell eseguibile e dei suoi parametri Il comando file indica quale eseguibile interessa debuggare (gdb) file sort se non è stato già indicato all avvio di GDB (o se si vuole cambiarlo) gdb sort Il comando run, seguito dai suoi eventuali parametri, lancia l eseguibile (gdb) run 3 5 4 2 1 oppure il comando set arg specifica i parametri a priori per poter poi lanciare l eseguibile con parametri impliciti (gdb) set arg 3 5 4 2 1 (gdb) run In ambiente Unix si può usare la redirezione (non in ambiente Windows!) Uscita del programma Se il programma funziona, stampa a video i risultati V = [ 1 2 3 5 ] Program exited normally. Se non funziona, stampa informazioni utili per individuare l errore Invalid Address specified to RtlFreeHeap( 00230000, 0240FFA0 ) Per trovare gli errori, occorre 1. poter seguire l esecuzione 2. poterne osservare i risultati parziali Utili, ma non sempre chiarissime... Stefano Ferrari Programmazione nnoacc 3

Esecuzione sospesa: breakpoint Il comando break seguito dalla coppia file:linea indica che il programma, una volta lanciato, dovrà fermarsi al principio della linea e del file indicati (gdb) break sort.c:28 Quando si lancia il comando run, l esecuzione si arresta dove richiesto, stampando la linea di codice, preceduta dal numero (gdb) run Breakpoint 1, main (argc=6, argv=0x232d20) at sort.c:28 28 InterpretaLineaComando(argc,argv,&V,&n); Questi punti di arresto si chiamano breakpoint: si possono aggiungere quanti breakpoint si vuole ogni volta che il programma passa per un breakpoint, si arresta Esecuzione sospesa: breakpoint Il comando break seguito da una funzione indica che il programma, una volta lanciato, si fermerà alla prima linea esecutiva della funzione (gdb) break InterpretaLineaComando Il comando continue prosegue l esecuzione dal breakpoint corrente arrestandola al successivo, ancora con la stampa della linea di codice Breakpoint 2, InterpretaLineaComando (argc=6, argv=0x232d20, pv=0x240ff5c, pn=0x240ff58) at sort.c:45 45 if (argc < 2) (Lanciare run ricomincerebbe da capo) Stefano Ferrari Programmazione nnoacc 4

Esecuzione passo per passo Giunti a un breakpoint, il comando step esegue una singola istruzione (gdb) step e arresta subito l esecuzione, stampando la prima linea successiva 57 *pn = argc-1; (Alla riga 45 succede la 57 perché la condizione dell if era falsa) Il comando next esegue una singola linea di codice: se la linea è una chiamata a funzione, esegue l intera chiamata Differenza tra step e next Introduciamo un terzo breakpoint (gdb) break sort.c:30 in modo da portarci alla chiamata della funzione di ordinamento Breakpoint 3, main (argc=6, argv=0x232d20) at sort.c:30 30 OrdinaVettoreInteri(V,n); Ora abbiamo due sviluppi alternativi possibili 1. con il comando step entriamo nella funzione (gdb) step OrdinaVettoreInteri (V=0x233fd0, n=5) at sort.c:104 104 while (n > 1) (siamo anche in un nuovo scope) 2. con il comando next la eseguiamo interamente (gdb) next 32 StampaVettoreInteri(V,n); Stefano Ferrari Programmazione nnoacc 5

Differenza tra step e next (2) Il comando finish arresta l esecuzione al termine della funzione corrente Breakpoint condizionali Introduciamo un breakpoint nel ciclo di stampa del vettore finale (gdb) break sort.c:120 Ogni comando step fa oscillare l esecuzione fra le linee 119 (condizione) e 120 (corpo del ciclo); eseguendo la prima, si stampa anche l iterazione 120 printf( %d,v[i]); 1 119 for (i = 1; i <= n; i++) 120 printf( %d,v[i]); 2 119 for (i = 1; i <= n; i++)... Stefano Ferrari Programmazione nnoacc 6

Breakpoint condizionali (2) Assegnando una condizione al breakpoint, si può scegliere un iterazione (gdb) break sort.c:120 if i >= 4 120 printf( %d,v[i]); 4 119 for (i = 1; i <= n; i++) Watchpoint Watchpoint: l esecuzione si arresta quando un espressione cambia valore Ci portiamo al principio della funzione TrovaIndiceMassimo (gdb) break TrovaIndiceMassimo introduciamo un nuovo watchpoint col comando watch e rilanciamo (gdb) watch imax L esecuzione si arresta appena la variabile imax cambia valore Continuing. Watchpoint 4: imax Old value = 2008948824 New value = 1 0x401539 in TrovaIndiceMassimo (V=0x233fd0, n=6) at sort.c:81 81 for (i = 2; i <= n; i++) Stefano Ferrari Programmazione nnoacc 7

Gestione dei punti di arresto I comandi info breakpoints e info watchpoints mostrano l elenco dei punti di arresto fissati (di entrambi i tipi) Il comando delete n cancella l n-esimo punto di arresto Osservazione e modifica di variabili print variabile stampa il valore corrente di una variabile (gdb) print imax $1 = 37814064 display variabile stampa ad ogni passo il valore corrente 82 if (V[i] > V[iMax]) imax = i; 1: imax = 2 (la stampa si interrompe quando la variabile esce dallo scope) set var variabile = valore assegna il valore alla variabile set var imax = 5 Nel seguito, il programma utilizza e stampa il nuovo valore step 82 for (i = 1; i <= n; i++) 1: imax = 5 Stefano Ferrari Programmazione nnoacc 8

Pila di sistema Il comando backtrace chiede di mostrare la pila di sistema (gdb) backtrace Il debugger elenca gli ambienti allocati sulla pila di sistema backtrace #0 TrovaIndiceMassimo (V=0x233fd0, n=4) at sort.c:82 #1 0x4015d0 in OrdinaVettoreInteri (V=0x233fd0, n=4) at sort.c:106 #2 0x401243 in main (argc=7, argv=0x232d48) at sort.c:30 Il comando frame n sposta l attenzione sull n-esimo ambiente (gdb) frame 1 frame 1 #1 0x4015d0 in OrdinaVettoreInteri (V=0x233fd0, n=4) at sort.c:106 106 i = TrovaIndiceMassimo(V,n); Scorciatoie Ogni comando può essere sostituito dalla sua iniziale o dal suo prefisso (tranne in caso di ambiguità step s st Premendo INVIO si ripete il comando precedente Stefano Ferrari Programmazione nnoacc 9