Проверьте, что делает запущенный процесс: выведите на стек трассировку неструктурированной программы Python - PullRequest
20 голосов
/ 27 июля 2011

Есть ли способ в Linux, чтобы проверить, что делает запущенный процесс демона Python?То есть без инструментирования кода и без его завершения?Желательно, чтобы я получил название модуля и номер строки в нем, который запущен в данный момент.

Обычные средства отладки, такие как strace, pstack и gdb, не очень полезны для кода Python.Большинство стековых фреймов просто содержат функции из кода интерпретатора, такие как PyEval_EvalFrameEx и PyEval_EvalCodeEx, это не дает вам никаких подсказок о том, где в .py-файле выполняется выполнение.

Ответы [ 4 ]

8 голосов
/ 26 апреля 2015

Некоторые ответы в Отображение трассировки стека из запущенного приложения Python применимы в этой ситуации:

2 голосов
/ 10 августа 2015

в системах POSIX, таких как Linux, вы можете использовать старый добрый GDB, см.

Существует также превосходная среда разработки PyCharm (доступна бесплатная версия сообщества), которая может подключаться к работающему процессу Python прямо из среды IDE с использованием Pdb 4 под капотом, см. Эту запись в блоге:

2 голосов
/ 27 июля 2011

winpdb позволяет вам присоединиться к работающему процессу python , но для этого вы должны запустить процесс python следующим образом:

 rpdb2 -d -r script.py

Затем, после установки пароля:

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

вы можете запустить winpdb для Файл> Присоединить (или Файл> Отсоединить) к процессу.

1 голос
/ 24 февраля 2017

lptrace делает именно это. Он позволяет подключаться к работающему процессу Python и отображать выполняемые в данный момент функции, как strace для системных вызовов. Вы можете назвать это так:

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)
...

Обратите внимание, что для работы требуется gdb, что доступно не на каждом сервере.

...