2012-04-24 12 views
8

Me gustan las funciones de prueba en el intérprete de Python. ¿Es posible depurar una función en el intérprete de Python cuando deseo ver más que un valor de retorno y un efecto secundario?Código de depuración en el intérprete de Python

Si es así, ¿podría mostrar las operaciones básicas del depurador (lanzamiento de la función con argumentos, el establecimiento de punto de interrupción, el siguiente paso, paso en, observando variables)? De lo contrario, ¿cómo depurarías una función de otra manera?

El punto es que quiero depurar solo una función en particular que se proporcionará con argumentos. No quiero depurar el código del módulo completo.

Gracias por su asesoramiento

+1

¿Ha buscado 'pdb' con Google? – hochl

+0

@hochl Pensé que pdb es una aplicación (algo así como gdb para lenguaje C) y no sabía que era un módulo. Lo intentaré, si es que puede depurar una función en particular. – xralf

+0

Es - 'pdb' es el camino a seguir, lea la [descripción del módulo] (http://docs.python.org/library/pdb.html). – hochl

Respuesta

6

Si desea depurar función específica se puede usar este -

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

sobre la línea de comandos. pdb.set_trace() se debe agregar en su función para romper allí.

Más información en la PDB se puede ver aquí - http://docs.python.org/library/pdb.html

+1

¿Puedo encontrar los números de línea donde debo establecer un punto de interrupción en el intérprete o debo averiguarlo desde el editor? – xralf

+0

OK, ahora entiendo. Debo colocar 'pdb.set_trace()' en mi código fuente. Buen trabajo, gracias. No lo he entendido antes. – xralf

6

Ver pdb module. Insertar en el código:

import pdb 
pdb.set_trace() 

... hace un punto de interrupción.

1

La depuración de código a no necesita ser modificado para incluir pdb.set_trace(). Esa llamada puede hacerse directamente en el intérprete justo antes de la depuración de código a:

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

Por ejemplo, dada test_script.py con el siguiente código:

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

una sesión de intérprete para depurar some_func utilizando el depurador comandos de paso en (s), al lado (n) y continuar (c) se vería así:

>>> 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 
>>> 

Ver la documentación para el módulo pdb para obtener más información sobre cómo utilizar el depurador: http://docs.python.org/library/pdb.html

Además, al utilizar el depurador, el comando help proporciona una buena lista de comandos y help <command> da ayuda específica a la orden dada.

Cuestiones relacionadas