python - portable - ¿Es posible retroceder en pdb?
python debugger online (3)
El depurador de GNU, gdb: es extremadamente lento, ya que deshace instrucciones de una sola máquina a la vez.
El depurador de Python, pdb: El comando de jump
lleva hacia atrás en el código, pero no revierte el estado del programa.
Para Python, el prototipo de depurador de python extendido, epdb, se creó por este motivo. Aquí está la thesis y aquí está el programa y el código .
Utilicé epdb como punto de partida para crear un depurador inverso en vivo como parte de mi título de maestría. La tesis está disponible en línea: combina la depuración inversa y la programación en vivo para el pensamiento visual en la programación de computadoras . En los capítulos 1 y 2 también cubro la mayoría de los enfoques históricos para la eliminación de errores.
Después de presionar n para evaluar una línea, quiero regresar y luego presionar s para entrar en esa función si falla. es posible?
Los documentos dicen:
j (ump) lineno Establece la siguiente línea que se ejecutará. Solo disponible en el cuadro inferior. Esto le permite retroceder y ejecutar código nuevamente, o saltar hacia adelante para omitir el código que no desea ejecutar.
La depuración inversa (volver al estado de la aplicación previamente registrada o la depuración de paso único hacia atrás) generalmente es una función de depuración del ensamblado o del nivel C. Por ejemplo, gdb puede hacerlo:
https://sourceware.org/gdb/wiki/ReverseDebug
Depuración bidireccional (o inversa)
La depuración inversa es completamente compleja y puede tener una penalización de rendimiento de 50,000x . También requiere un amplio soporte de las herramientas de depuración. La máquina virtual Python no proporciona soporte para la depuración inversa.
Si está evaluando el código de Python de forma interactiva, le sugiero que intente con IPython Notebook que proporcione capas de Python interactivas basadas en HTML. Puede escribir fácilmente su código y mezclar y combinar el orden. Sin embargo, no hay soporte para la depuración de pdb. Hay ipdb que proporciona una mejor historia e instalaciones de búsqueda para los comandos de depuración introducidos, pero no hace saltos hacia atrás directos, hasta donde yo sé.
PyPy ha comenzado a implementar RevDB , que es compatible con la depuración inversa.
Está (hasta febrero de 2017) todavía en una etapa alfa, solo admite Python 2.7, solo funciona en Linux o OS X, y requiere que usted construya Python usted mismo a partir de una revisión especial. También es muy lento y usa mucha RAM. Para citar la página de Bitbucket:
Tenga en cuenta que el archivo de registro suele crecer a una velocidad de 1-2 MB por segundo. Suponiendo que el tamaño no es un problema, el factor limitante es:
- Reproducción de tiempo Si su ejecución grabada tomó más de unos pocos minutos, la reproducción será extremadamente lenta. A veces es necesario revisar el registro completo varias veces en una sola sesión. Si el error se produce al azar, pero rara vez, debe ejecutar la grabación durante unos minutos, luego mata el proceso y vuelva a intentarlo, varias veces hasta que se produzca el bloqueo.
- Uso de RAM para reproducir. Los requisitos de RAM son 10 o 15 veces más grandes para reproducir que para grabar. Si eso es demasiado, puedes probar con un valor más bajo para MAX_SUBPROCESSES en _revdb / process.py, pero siempre será varias veces más grande.
Los detalles están en el blog de PyPy y las instrucciones de instalación y uso están en la página bitbucket de RevDB .