Проверьте, что делает выполняемый процесс: трассировка стека стека неинструментированной программы Python
Есть ли способ в Linux проверить, что делает текущий процесс-демон Python? То есть, не используя код и не прерывая его? Предпочтительно, я хотел бы получить имя модуля и номер строки в нем, который в настоящее время запущен.
Обычные инструменты отладки, такие как strace, pstack и gdb, не очень полезны для кода Python. Большинство фреймов стека содержат только функции из кода интерпретатора, такие как PyEval_EvalFrameEx и PyEval_EvalCodeEx, это не дает вам никакого намека на то, что в .py файле выполняется выполнение.
Ответы
Ответ 1
Некоторые ответы в Отображение трассировки стека из запущенного приложения Python применимы в этой ситуации:
Ответ 2
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 в File > Attach to (или File > Detach from) процесс.
Ответ 3
на POSIX-системах, таких как Linux, вы можете использовать старый добрый GDB, см.
Там также отличная среда разработки PyCharm (бесплатная версия сообщества), которая может подключаться к запущенному процессу Python прямо из среды IDE, используя Pdb 4 под капотом, см. эту запись в блоге:
Ответ 4
lptrace делает именно это. Он позволяет подключаться к запущенному процессу Python и отображать выполняемые в данный момент функции, например strace
для системных вызовов. Вы можете назвать это следующим образом:
[email protected]:/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, который недоступен на каждом сервере.