debugger - Sugerencias para las herramientas de depuración de Python?
python pdb (10)
Ayer hice una simulación usando Python. Tuve algunas dificultades con las variables y la depuración .
¿Hay algún software para Python que proporcione un depurador decente?
Pregunta relacionada: ¿Cuál es la mejor manera de depurar mi código Python?
Puede consultar el depurador python pdb, que se incluye en la biblioteca estándar: http://docs.python.org/library/pdb.html
Recomendaría pydb e ipython para la depuración interactiva.
Ambos tienen screencasts disponibles en showmedo.com
Winpdb es un depurador GPL Python gráfico independiente de la plataforma con soporte para la depuración remota a través de una red, múltiples hilos, modificación del espacio de nombres, depuración incorporada, comunicación encriptada y es hasta 20 veces más rápido que pdb.
caracteristicas:
- Licencia GPL. Winpdb es Software Libre.
- Compatible con CPython 2.3 a 2.6 y Python 3000
- Compatible con wxPython 2.6 a 2.8
- Plataforma independiente, y probado en Ubuntu Gutsy y Windows XP.
- Interfaces de usuario: rpdb2 está basado en la consola, mientras que winpdb requiere wxPython 2.6 o posterior.
Captura de pantalla http://winpdb.org/images/screenshot_winpdb_small.jpg
El IDE de Komodo (no el Komodo Edit gratuito) viene con un depurador. No lo he usado en más de un año, pero fue bueno en aquel entonces (v 3, IIRC).
pudb es un depurador visual para python.
Usé PyCharm y WingIDE para la depuración, ambos son excelentes en la depuración.
PyCharm usa bastante RAM (está en Java), aún así terminé usándola, ya que puedo depurar doctests que estoy ejecutando desde allí.
WindIDE está escrito en Python, me gusta más que PyCharm, excepto la falta de ejecución de doctests.
También puedes probar Spyder, que nunca logré hacer funcionar.
Como sugiere la publicación , hay algunas opciones:
pdb: depurador incorporado de Python
pudb: depurador GUI
pydbgr: una reescritura del depurador pydb
ipdb: ipdb de iPython
¡No te olvides de la depuración post mortem! Después de lanzar una excepción, el marco de pila con todos los locales está contenido en sys.last_traceback
. Puede hacer pdb.pm()
para ir al marco de pila donde se lanzó la excepción, luego p (retty) p (rint) los locals()
.
Aquí hay una función que usa esta información para extraer las variables locales de la pila.
def findlocals(search, startframe=None, trace=False):
from pprint import pprint
import inspect, pdb
startframe = startframe or sys.last_traceback
frames = inspect.getinnerframes(startframe)
frame = [tb for (tb, _, lineno, fname, _, _) in frames
if search in (lineno, fname)][0]
if trace:
pprint(frame.f_locals)
pdb.set_trace(frame)
return frame.f_locals
Uso:
>>> def screwyFunc():
a = 0
return 2/a
>>> screwyFunc()
Traceback (most recent call last):
File "<pyshell#62>", line 1, in <module>
screwyFunc()
File "<pyshell#55>", line 3, in screwyFunc
return 2/a
ZeroDivisionError: integer division or modulo by zero
>>> findlocals(''screwyFunc'')
{''a'': 0}