Способ взглянуть на программу Python, запущенную прямо сейчас - PullRequest
15 голосов
/ 28 октября 2009

Можно ли найти какую-либо информацию о том, что программа Python , запущенная сейчас , делает без прерывания?

Кроме того, если это невозможно, все равно есть ли сбой работающей программы Python, чтобы я мог хотя бы получить трассировку стека (используя PyDev в Ubuntu)?

Я знаю, что должен был использовать журналы или запустить его в режиме отладки или вставить оператор для запуска отладчика ...

Похожие вопросы

Ответы [ 7 ]

26 голосов
/ 28 октября 2009

Если вы разместите

import code
code.interact(local=locals())

в любой точке вашего скрипта python будет создавать экземпляр оболочки python именно в той точке, которая имеет доступ ко всему состоянию скрипта в этой точке. ^ D выходит из оболочки и возобновляет выполнение после этой точки.

Вы даже можете изменить состояние в этой точке из оболочки, вызова функций и т. Д.

8 голосов
/ 28 октября 2009

Если у вас есть работающий Python, который не был построен с каким-либо механизмом трассировки или ведения журнала, и вы хотите посмотреть, что он делает внутри, тогда есть два варианта:

4 голосов
/ 28 октября 2009

Для «сбоя» программы Python со стековой трассировкой вы можете отправить ее SIGINT, то есть, если вы не перехватите ее или не поймаете KeyboardInterrupt (python устанавливает обработчик SIGINT по умолчанию, который вызывает KeyboardInterrupt).

Что касается отладки, разве PyDev не имеет встроенной поддержки отладки (через pdb)?

2 голосов
/ 28 октября 2009

Лично я предпочитаю ipdb . Это pdb с добавленным IPython совершенством. Кажется, это скорее интерактивный интерпретатор Python с несколькими ярлыками для функций отладки.

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

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

0 голосов
/ 28 октября 2009

Если вас устраивает сбой, вставка "1/0" создаст быструю и грязную точку останова с полным обратным ходом!

0 голосов
/ 28 октября 2009

Установить обработчик сигнала, который устанавливает функцию трассировки с помощью sys.settrace(), которая печатает трассировку и очищает, очищает функцию трассировки. Это позволит вам в любой момент увидеть, где находится ваша программа, не прерывая ее. Обратите внимание, что сигнал обрабатывается после каждой sys.getcheckinterval() инструкции Python.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...