¿Cómo vuelco un proceso completo de Python para depurar más tarde la inspección?

StackOverflow https://stackoverflow.com/questions/141802

  •  02-07-2019
  •  | 
  •  

Pregunta

Tengo una aplicación de Python en un estado extraño. No quiero hacer la depuración en vivo del proceso. ¿Puedo volcarlo en un archivo y examinar su estado más adelante? Sé que he restaurado los archivos core de los programas C en gdb más tarde, pero no sé cómo examinar una aplicación Python de una manera útil desde gdb.

(Esta es una variación de mi pregunta sobre depuración de memleaks en un sistema de producción .)

¿Fue útil?

Solución

No hay otra forma integrada que no sea abortar (con os.abort (), que provoca el volcado de fondo si los límites de recursos lo permiten), aunque ciertamente puede crear su propia función de "volcado" que descarga información relevante sobre los datos que le interesan. acerca de. No hay herramientas preparadas para ello.

En cuanto al manejo del archivo de núcleo de un proceso de Python, el fuente de Python tiene un Archivo gdbinit que contiene macros útiles. Sigue siendo mucho más doloroso que entrar en el proceso en sí mismo (con pdb o el intérprete interactivo) pero hace la vida un poco más fácil.

Otros consejos

Alguien de arriba dijo que no hay una forma integrada de realizar esto, pero eso no es del todo cierto. Por ejemplo, puede echar un vistazo a las herramientas de depuración de los pilones. Cuando hay una excepción, el controlador de excepciones guarda el seguimiento de la pila e imprime una URL en la consola que se puede usar para recuperar la sesión de depuración a través de HTTP.

Si bien es probable que mantengan estas sesiones en la memoria, solo son objetos de Python, por lo que no hay nada que le impida capturar un volcado de pila y restaurarlo más tarde para su inspección. Significaría algunos cambios en la aplicación, pero debería ser posible ...

Después de algunas investigaciones, resulta que el código relevante proviene realmente de Paste's Módulo EvalException . Debes poder mirar allí para averiguar lo que necesitas.

Esta respuesta sugiere hacer un volcado del núcleo de su programa y luego continuar la ejecución en otro cuadro suficientemente similar.

También es posible escribir algo que elimine todos los datos del proceso, por ejemplo,

scroll top