Come fare il debug in python

Per avviare il debugging di un programma scritto in Python uso il modulo pdb detto Python Debugger. Entro nel programma da verificare e importo la libreria pdb.

import pdb

Per avviare il debug aggiungo la funzione pdb.set_trace() nella riga di codice che mi interessa.

pdb.set_trace()

Quest'ultima istruzione blocca l'esecuzione e avvia il debug.

Attenzione. Al termine del debug devo ricordarmi di togliere le istruzioni di pdb dal codice sorgente del programma. In particolar modo se il debug è inserito in una if e si apre solo in determinate situazioni, è facile dimenticarlo là.

Come funziona Python Debugger ( pdb )

Dopo aver inserito l'istruzione di debug nel programma, lo eseguo.

Quando l'interprete incontra la funzione set_trace() sospende l'esecuzione e apre la console del debugging.

(Pdb)

A questo punto, posso eseguire i vari comandi di debug, tra i quali:

  • list = visualizza il codice e la riga in cui si trova il programma
  • next = esegue la riga successiva

Se voglio vedere il contenuto di una variabile, mi basta digitare il nome della variabile sul prompt e dare invio.

Come uscire dal debugger?

Per uscire dal debug ho due possibilità

  • quit o exit = esce dal debugger e dall'esecuzione
  • c = continua l'esecuzione del programma

Oltre a questi comandi ce ne sono molti altri.

Per conoscere tutti i comandi di Python debugger basta digitare help sul prompt del dubugger.

l'help online di Python debugger

Un esempio pratico

Ho un semplice programma che stampa i numeri da 1 a 10 tramite una struttura iterativa.

  1. import pdb
  2. for i in range(1, 10):
  3. print(i)
  4. if (i==5):
  5. pdb.set_trace()
  6. print("fine")

Quando il programma esegue il quinto ciclo avvio il debugger.

Si apre il prompt di pdb.

(Pdb)

Digito il comando list per vedere a che punto del programma si trova l'esecuzione.

La riga del codice corrente è indicata con una freccia ->

(Pdb) list
1 import pdb
2 -> for i in range(1, 10):
3 print(i)
4 if (i==5):
5 pdb.set_trace()
6 print("fine")
[EOF]

A questo punto voglio conoscere il valore corrente della variabile i.

Digito il nome della variabile e do invio, la variabile vale 5.

(Pdb) i
5

Ora voglio avanzare l'esecuzione di un passo.

Digito il comando next.

(Pdb) next

E così via.

Per uscire dal debugger posso continuare (c) o annullare (quit) l'esecuzione.

Elenco dei comandi di python debugger

Ecco la lista completa dei comandi utilizzabili dal prompt pdb di python debugger.

  • EOF
    Gestisce la ricezione di EOF come comando.
  • a ( o args )
    Stampa la lista degli argomenti della funzione corrente.
  • alias
    Crea un alias che esegue 'comando'.
  • args
    Stampa la lista degli argomenti della funzione corrente.
  • b ( o break )
    Elenca tutte le interruzioni.
  • bt
    Stampa una traccia dello stack, con il frame più recente in basso.
  • c ( o continue o cont )
    Continua l'esecuzione del programma. Si ferma solo se viene viene rilevato un punto di interruzione.
  • cl ( o clear )
    Elimina tutti i breakpoint dal programma o un breakpoint specifico.
  • commands
    Specifica un elenco di comandi per il numero di breakpoint.
  • condition
    Imposta una nuova condizione per il punto di interruzione.
  • d ( o down )
    Sposta i livelli attuali del conteggio dei frame predefinito nella traccia dello stack su un frame più recente.
  • debug
    Inserisce un debugger ricorsivo che passa attraverso l'argomento del codice
  • disable
    Disabilita i punti di interruzione forniti come elenco separato da spazi di numeri di breakpoint.
  • display
    Mostra il valore dell'espressione se è cambiato, ogni volta che l'esecuzione si ferma nel frame corrente.
  • enable
    Abilita i punti di interruzione forniti come elenco separato da spazi di numeri di breakpoint.
  • exit
    Esce dal debugger. Il programma in esecuzione viene interrotto.
  • h ( o help )
    Visualizza l'help online di Pdb.
  • ignore
    Impostare il conteggio ignore per il numero di breakpoint specificato.
  • interact
    Avvia un interprete interattivo il cui spazio dei nomi globale contiene tutti i nomi (globali e locali) trovati nell'ambito corrente.
  • j ( o jump )
    Imposta la prossima linea da eseguire.
  • l ( o list )
    Visualizza il codice sorgente del programma.
  • ll ( o longlist )
    Elenca l'intero codice sorgente per la funzione o il frame corrente.
  • n ( o next )
    Continua l'esecuzione solo sulla riga successiva
  • p
    Stampa il valore dell'espressione
  • pp
    Significa pretty print. Stampa il valore dell'espressione
  • q ( o quit )
    Esce dal debugger. Il programma in esecuzione viene interrotto.
  • r ( o return )
    Continua l'esecuzione fino a quando la funzione corrente non ritorna.
  • restart ( o run )
    Riavvia il debugging
  • retval ( o rv )
    Stampa il valore restituito per l'ultimo da una funzione.
  • s ( o step )
    Esegue la linea corrente e si ferma alla prima occasione possibile
  • source
    Cerca di ottenere il codice sorgente per l'oggetto dato e visualizzalo.
  • tbreak
    E' simile a break ma imposta un punto di interruzione temporaneo. Viene automaticamente cancellato dopo la prima volta.
  • u ( o up )
    Sposta il livello corrente del conteggio (predefinito) in alto nella traccia dello stack.
  • unalias
    Cancella un alias
  • undisplay
    Non visualizza più l'espressione nel frame corrente.
  • unt ( o until )
    Continua l'esecuzione fino a quando viene raggiunta la linea con un numero maggiore di quello corrente. Se si indica un numero di riga come argomento, continua l'esecuzione finché viene raggiunta ed eseguita.
  • w ( o where )
    Stampa una traccia dello stack, con il frame più recente in basso.
  • whatis
    Stampa il tipo dell'argomento.

Per conoscere più nel dettaglio il significato e il funzionamento di ogni comando, posso usare l'help online di pdb, indicando il nome del comando.

(pdb) help nome_comando

E così via.

 


 

Segnalami un errore, un refuso o un suggerimento per migliorare gli appunti

FacebookTwitterLinkedinLinkedin
knowledge base
  1. Il linguaggio Python
  2. Come installare Python sul PC
  3. Come scrivere un programma in Python
  4. Come usare Python in modalità interattiva
  5. Le variabili
  6. I numeri
  7. Gli operatori logici
  8. Le strutture iterative ( o cicli )
  9. Le strutture condizionali
  10. Le eccezioni
  11. I file in python
  12. Le classi
  13. I moduli