Prof. Pagani Corrado IL DEBUGDEL SOFTWARE
INTRODUZIONE Di solito i programmi non funzionano Un programma funziona quando in ogni condizione restituisce il valore atteso o gestisce l errore di inserimento dati dell utente fornendo l opportuno messaggio di errore in output Esempi Un programma che va in ciclo non funziona Un programma che si pianta se l utente inserisce valori sbagliati non funziona Un programma che ogni tanto si pianta non funziona
TIPOLOGIE DI ERRORI Errori di sintassisi commettono nella fase di scrittura delprogrammanellinguaggioscelto. Gli errori di sintassi impediscono la compilazione del programma da parte delcompilatoreche quindi tipicamente segnalerà la presenza dell'errore. Errori di logica(o semantica) si commettono nella fase di progettazione dell'algoritmo: possono essere causati da una mancata comprensione delproblema. Questi errori conducono tipicamente alla progettazione di un algoritmo che non fornisce l'output richiesto nell'ambito di una o più istanze del problema da risolvere. Sono difficili da individuare e spesso si deve ricorrere al debugging. Errori di runtimepossono verificarsi nella fase diesecuzionedel programma, anche se l'algoritmo è corretto e il codice viene compilato correttamente. Spesso sono relativi all'utilizzo errato dellamemoriada parte deipuntatorio nell elaborazione di dati che portano ad operazioni non eseguibili (ad esempio divisioni per 0).
TEST E DEBUG Ildebugging(o semplicementedebug), ininformatica, indica l'attività che consiste nell'individuazione da parte delprogrammatoredella porzione disoftwareaffetta da errore (bug) rilevata neisoftwarea seguito dell'utilizzo del programma. L'attività di debugè una delle operazioni più importanti per la messa a punto di unprogramma, spesso estremamente difficile per la complessità dei software oggi in uso e delicata per il pericolo di introdurre nuovi errori (effetti collaterali) o comportamenti difformi da quelli desiderati nel tentativo di correggere quelli per cui si è svolta l'attività di debug. Tipicamente permette di: Procedere passo passo o fino al successivo breackpoint Monitorare il valore delle variabili Assegnare valore manualmente alle valibili Fondamentale per individuare gli errori LOGICI e di RUNTIME
DEBUGGING A MANO Si può effettuare senza l ausilio dell ambiente di sviluppo Si inseriscono delle stampe ausiliarie per capire il flusso dell'esecuzione gli stati intermedi e i valori delle varibili Non richiede supporto di toolsparticolari Richiede attenzione a non introdurre ulteriori errori Un po' artigianale Poco efficiente
TOOLS DI DEBUG DEGLI AMBIENTI DI SVILUPPO Richiede l'uso di tooldell'ambiente di sviluppo o installazione di plug in esterni Consente di verificare il flusso dell'esecuzione: Tracing breakpoints gli stati intermedi Espressioni custom di controllo Strumento Molto potente Ad esempio ambienti di sviluppo come Eclipse, Code::Blockse VisualStudio forniscono un buon supporto
DEBUGCON ECLIPSE(JAVA) Lanciate il programma con Debugdal menu Run si passaalla prospettiva Debug Inserite almeno un breakpoint(doppio click a fianco della numerazione di riga) da cui far iniziare l analisi del codice Esecuzione del codice ResumeF8 StepIntoF5 quando incontra una chiamata a funzione entra nel codice sorgente della funzione chiamata StepOverF6 quando incontra una chiamata a funzione NON entra nel codice sorgente della funzione chiamata si fermerà ugualmente se incontra un breakpoint Tracing Nella scheda Variablespotete vedere i valori delle variabili Nella scheda breakpointspotete osservare tutti i punti di interruzione definiti Nella scheda Expressions(Windows Show view) potete digitare le espressioni custom e verificare il valore di ritorno
DEBUG CON ECLIPSE(JAVA) - CONFIGURAZIONE Siccome non vogliamo entrare nell esecuzione del codice delle chiamatealle librerie di sistema le filtriamo: Windows PreferencesJava DebugStep Filtering Seleziono Use Step Filters Select All
DEBUGCON VISUALSTUDIO (C#) Lanciate il programma con Debugdal menu Runsi passa alla prospettiva Debug Inserite almeno un breakpoint(click a fianco della numerazione di riga) da cui far iniziare l analisi del codice Esecuzione del codice ResumeF5 StepIntoF11 quando incontra una chiamata a funzione entra nel codice sorgente della funzione chiamata StepOverF10 quando incontra una chiamata a funzione NON entra nel codice sorgente della funzione chiamata si fermerà ugualmente se incontra un breakpoint Tracing Nella scheda Watch(Espressione di controllo) potete vedere i valori delle variabili
DEBUGCON VISUALSTUDIO (C#) Punto di interruzione Prossima riga in esecuzione Verifico i valori attualmente memorizzati nella variabile mylista