python debugging process daemon stack-trace

Compruebe lo que está haciendo un proceso en ejecución: imprima el seguimiento de la pila de un programa Python no documentado



debugging process (4)

Algunas de las respuestas en Mostrar el seguimiento de pila de una aplicación Python en ejecución son aplicables en esta situación:

¿Hay alguna forma en Linux de verificar qué está haciendo un proceso de demonio de Python en ejecución? Es decir, ¿sin instrumentar el código y sin terminarlo? Preferiblemente me gustaría obtener el nombre del módulo y el número de línea que se está ejecutando actualmente.

Las herramientas de depuración convencionales como strace, pstack y gdb no son muy útiles para el código Python. La mayoría de los marcos de pila solo contienen funciones del código del intérprete como PyEval_EvalFrameEx y PyEval_EvalCodeEx, no le da ninguna pista sobre si el archivo .py está ejecutando.


En sistemas POSIX como Linux, puede usar buenos GDB antiguos, vea

También está el excelente IDE de PyCharm (versión de comunidad gratuita disponible) que se puede adjuntar a un proceso Python en ejecución desde el IDE, utilizando Pdb 4 debajo del capó, consulte esta entrada de blog:


winpdb le permite adjuntar a un proceso de Python en ejecución , pero para hacer esto, debe iniciar el proceso de Python de esta manera:

rpdb2 -d -r script.py

Luego, después de establecer una contraseña:

A password should be set to secure debugger client-server communication. Please type a password:mypassword

podría iniciar winpdb en Archivo> Adjuntar a (o Archivo> Desconectar) del proceso.


lptrace hace exactamente eso. Le permite adjuntarse a un proceso Python en ejecución y mostrar las funciones que se están ejecutando actualmente, como hace strace para las llamadas al sistema. Puedes llamarlo así:

vagrant@precise32:/vagrant$ sudo python lptrace -p $YOUR_PID fileno (/usr/lib/python2.7/SocketServer.py:438) meth (/usr/lib/python2.7/socket.py:223) fileno (/usr/lib/python2.7/SocketServer.py:438) meth (/usr/lib/python2.7/socket.py:223) ...

Tenga en cuenta que requiere gdb para ejecutarse, que no está disponible en todos los servidores.