Debuggeando a #Python desde la consola

El módulo pdb es un debugger interactivo para programas escritos en Python. Soporta breakpoints, stepping individuales, inspección de los stackslisting del código fuente y evaluación del código de Python en el contexto de todas las tramas.

Se invoca al debugger importando el módulo pdb. Para correr un programa bajo el control del debugger, ver el siguiente ejemplo:

>>> import pdb
>>> import mymodule
>>> pdb.run('mymodule.test()')
> <string>(0)?()
(Pdb) continue
> <string>(1)?()
(Pdb) continue
NameError: 'spam'
> <string>(1)?()
(Pdb)

También, puede ser llamado desde la consola, para controlar el flujo de otros scritps.

python -m pdb myscript.py

El módulo define las siguientes funciones:

pdb.run(statement[, globals[, locals]])
Ejecuta el valor statement (declarado como una cadena de caracteres) bajo el control del debugger. El prompt del debugger aparece antes de que sea ejecutado cualquier código; se pueden agregar breakpoints y luego escribir continue, o se puede recorrer utilizando las sentencias stepnext (explicados debajo).
pdb.runeval(expression[, globals[, locals]])
Evalua la expression (declarada como una cadena de caracteres) bajo el control del debugger. Cuando runeval() retorna, este retorna el valor de la expresión.
pdb.runcall(function[, argument, ])
Llama a la function (función o método, no un string) con los argumentos pasados. Cuando runcall() retorna, retorna cualquier cosa que la función haya retornado. El prompt del debugger aparece tan pronto como la función es llamada.
pdb.set_trace()
Introduce el debugger en el punto que es llamado. Esto es útil para hardcodear un breakpoint en un cierto punto de un programa, incluso si el código no será debuggeado..
pdb.post_mortem([traceback])
Introduce el post-mortem debugging en el traceback declarado.
pdb.pm()
Introducepost-mortem debuggingen el traceback ubicado en sys.last_traceback.

Y ahora sí, vamos a los comandos con los que vamos a interactuar en nuestras primeras pruebas:

 

  • h(elp) [command]: Ayuda sobre el comando que sea pasado como parámetro.
  • w(here): Imprime un trace del stack, con los valores más recientes.
  • d(own): Mueve el frame un nivel hacia abajo del stack (hacia un nuevo frame)
  • u(p): Mueve el frame un nivel hacia arriba del stack (hacia un frame más viejo)
  • b(reak) [[filename:]lineno | function[, condition]]: En el parámetro lineno (line number), asigna un break en el archivo abierto.
  • tbreak [[filename:]lineno | function[, condition]]: Asigna un breakpoint temporal, que desaparece en el primer hit.
  • cl(ear) [filename:lineno | bpnumber [bpnumber …]]: Limpia los breakpoints.
  • disable [bpnumber [bpnumber …]]: Deshabilita breakpoints.
  • enable [bpnumber [bpnumber …]]: Habilita breakpoints.
  • commands [bpnumber]: Se especifica una lista de comandos que serán ejecutados al producirse el breakpoint.
  • s(tep): Ejecuta la siguiente línea.
  • n(ext): Continúa la ejecución hasta la próxima línea que se encuentre dentro de la función o hasta que esta retorna. La diferencia entre ambas es que step se detiene y recorre todas las funciones y sus llamadas y next, ejecuta y continúa el flujo pasando a la siguiente línea de la aplicación.
  • c(ont(inue)): Continúa el flujo de la aplicación y solo para cuando se ejecuta un breakpoint.
  • q(uit): Salir.

Para más información, por favor dirigirse a la página oficial de Python y la documentación de pdb, disponible aquí.

 

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s