.: HosiriS :.

Informatica e non solo

Python debugging

Posted by hosiris su aprile 19, 2011

Quando si intraprende la stesura di un buon programma non si può rinunciare ad un buono strumento di debug.
Anche python permette di effettuare dei controlli sul codice tramite un modulo chiamato pdb, purtroppo non è di utilizzo immediato (almeno per i niubbi).
Alla base di questo articolo sta la possibilità di scrivere codice python attraverso un normale editor e che il codice verrà eseguito attraverso un terminale.

Iniziamo le nostre operazioni.

Creiamo un piccolo programmino:

# prova.py
frase1 = "ciao sono un programma, "
frase2 = "che usa pdb: "
frase3 = "Python DeBugger"
final = frase1 + frase2 + frase3
print final

inseriamo il modulo del debugger

import pdb

inseriamo il seguente codice dove vorremmo che abbia inizio il tracing:

pdb.set_trace()

Il codice completo sarà:

# prova.py
import pdb

frase1 = "ciao sono un programma, "
pdb.set_trace()
frase2 = "che usa pdb: "
frase3 = "Python DeBugger"
final = frase1 + frase2 + frase3
print final

avviamo il codice:

$ python prova.py

Quando il programma incontrerà il comando pdb.set_trace() avrà inizio la trace. Quindi, l’esecuzione verrà bloccata, verrà mostrato lo stato di esecuzione e il programma rimarrà in attesa di un comando esterno.

Al prompt (Pdb) premiamo “n” ed INVIO, in questo modo diciamo al debugger di passare all’istruzione successiva.

Proseguendo premendo “n” arriveremo tranquillamnete alla fine del programma.
Esiste la possibilità di eseguire automaticamente l’ultimo comando premendo soltanto INVIO.

Per uscire dal processo di debug è sufficiente premere “q“.
Per stampare il valore delle variabili è sufficiente premere “p” seguito dal nome della variabile che ci interessa. Qualora volessi conoscere il valore di più variabili è sufficiente separarle da una virgola.

Analizziamo un attimo il funzionamento. Ipotizziamo di giungere alla linea in cui definiamo la variabile “final” e mostriamo il valore della variabile. Vedremo un errore, questo perché l’istruzione non è ancora stata eseguita, infatti premendo “n” e di nuovo “p” vedremo che la variabile è stata creata.

Quando premete “q” vi sarete sicuramente accorti che viene provocato i lcrash del programma, se volessimo che il programma continuo l’esecuzione fermando il debug bisogna utilizzare il comando “c“.
Qualora volessimo conoscere la posizione all’interno del codice, possiamo utilizzare il comando “l” che mostrerà lo stralcio di codice che sta intorno il punto in cui ci troviamo.

Ormai non esiste programma che faccia uso di almeno una funzione definita al difuori del codice principale. Immaginiamo di avere questo secondo codice:

# prova2.py
import pdb

def combine(s1,s2,s3):
    s = s1 + s2 + s3
    s = '"' + s +'"'
    return s

frase1 = "ciao sono un programma, "
pdb.set_trace()
frase2 = "che usa pdb: "
frase3 = "Python DeBugger"
final = combine(frase1, frase2, frase3)
print final

In questo esempio, l’uso del solo comando “n” non ci permette di entrare all’interno della funzione. Per poter avere quasta opportunità dovremmo premere “s“.

Qualora fossimo soddisfatti dell’analisi fatta all’interno della funzione e volessimo ritornare all’esecuzione del programma, premiamo “r” e continuiamo con il nostro debug

Ci sono altre funzionalità che sono rese possibili da questo debugger, ma qui ho spiegato le principali e più usate. La curiosità potrà spingervi a fare nuove ricerche.
Buon divertimento

Fonte: PythonConquersTheUniverse

4 Risposte to “Python debugging”

  1. […] Continua a Leggere […]

  2. juhan said

    Ottimo post! Talmente bello che lo userò per il mio blog, linkandolo.
    Una piccola osservazione: quando riporti codice oltre a _code_ mettici anche _pre_ per via che l’html è quello che è e zappa via gli spazi, poi Python protesta.

  3. […] caso l’ho scoperto ieri: HosiriS (ne ho già parlato, dovreste seguirlo) ieri ha pubblicato questo che è tutto quello che serve come introduzione al debugging in Python. Ecco a volte la […]

Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

 
%d blogger cliccano Mi Piace per questo: