2012-04-24 8 views
8

Mi piacciono le funzioni di test nell'interprete Python . È possibile eseguire il debug di una funzione nell'interprete Python quando voglio vedere più di un valore di ritorno e un effetto collaterale?Codice di debug nell'interprete Python

Se è così, potreste mostrare le operazioni di debug di base (lancio della funzione con gli argomenti, l'impostazione punto di interruzione, il prossimo passo, un passo in, guardando variabile)? In caso contrario, come si esegue il debug di una funzione in un altro modo?

Il punto è che voglio eseguire il debug solo di una funzione particolare che verrà fornita con argomenti. Non voglio eseguire il debug dell'intero codice del modulo.

grazie per il consiglio

+1

Hai cercato 'pdb' con Google? – hochl

+0

@hochl Ho pensato che pdb sia un'applicazione (qualcosa come gdb per il linguaggio C) e non sapevo che fosse un modulo. Lo proverò, se è in grado di eseguire il debug di una funzione particolare. – xralf

+0

È - 'pdb' è la strada da percorrere, leggi la [descrizione del modulo] (http://docs.python.org/library/pdb.html). – hochl

risposta

6

Se si desidera eseguire il debug funzione specifica è possibile utilizzare questo -

>>> import pdb 
>>> import yourmodule 
>>> pdb.run('yourmodule.foo()') 

oltre la linea di comando. pdb.set_trace() dovrebbe essere aggiunto nella tua funzione per rompere lì.

Maggiori informazioni sul progetto preliminare di bilancio può essere visto qui - http://docs.python.org/library/pdb.html

+1

Posso trovare i numeri di riga in cui dovrei impostare un punto di interruzione nell'interprete o dovrei scoprirlo dall'editor? – xralf

+0

OK, ora capisco. Dovrei inserire 'pdb.set_trace()' nel mio codice sorgente. Bel lavoro, grazie. Non l'ho capito prima. – xralf

6

Vedere modulo pdb. Inserire nel codice:

import pdb 
pdb.set_trace() 

... crea un punto di interruzione.

1

Il debug di codice-a-non ha bisogno di essere modificato per includere pdb.set_trace(). Quella chiamata può essere fatta direttamente nell'interprete poco prima del debug di codice da:

>>> import pdb 
>>> pdb.set_trace(); <code-to-debug> 

Ad esempio, dato test_script.py con il seguente codice:

def some_func(text): 
    print 'Given text is {}'.format(repr(text)) 
    for index,char in enumerate(text): 
     print ' '*index, char 

una sessione di interprete per eseguire il debug some_func utilizzando il comandi debugger step-in (s), successiva (n) e proseguire (c) sarebbe simile:

>>> import pdb 
>>> import test_script 
>>> pdb.set_trace(); test_script.some_func('hello') 
--Call-- 
> c:\src\test_script.py(1)some_func() 
-> def some_func(text): 
(Pdb) s 
> c:\src\test_script.py(2)some_func() 
-> print 'Given text is {}'.format(repr(text)) 
(Pdb) n 
Given text is 'hello' 
> c:\src\test_script.py(3)some_func() 
-> for index,char in enumerate(text): 
(Pdb) c 
h 
    e 
    l 
    l 
    o 
>>> 

Vedere la documentazione per il modulo pdb per ulteriori informazioni su come utilizzare il debugger: http://docs.python.org/library/pdb.html

Inoltre, durante l'utilizzo del debugger, il comando help fornisce una bella lista di comandi e help <command> dà un aiuto specifico per il comando dato.