Ловля приложения Python, прежде чем это выйдет

У меня есть приложение Python, которое, как предполагается, очень долговечно, но иногда процесс просто исчезает, и я не знаю почему. Ничто не зарегистрировано, когда это происходит, таким образом, я в чем-то вроде потери.

Есть ли некоторый путь в коде, в котором я могу сцепиться с событием выхода или некоторым другим способом заставить часть моего кода работать непосредственно перед выходами процесса? Я хотел бы зарегистрировать состояние структур памяти для лучше понимания то, что продолжается.

7
задан Leopd 29 March 2010 в 01:54
поделиться

3 ответа

atexit произносится как «при выходе». В первый раз, когда я прочитал это имя функции, я прочитал его как «тексит», что не имеет большого смысла в почти .

8
ответ дан 6 December 2019 в 15:20
поделиться

Вы можете попробовать запустить приложение прямо из консоли (cmd в Windows, sh / bash / и т. Д. В unix), чтобы увидеть трассировку стека, и т.д., выводимые на консоль, когда процесс умирает.

3
ответ дан 6 December 2019 в 15:20
поделиться

Я не уверен, можете ли вы изменить исходный код, но если да, вы можете попробовать следующее:

def debugexcept(type, value, tb):
    if hasattr(sys, 'ps1') or not (sys.stderr.isatty() and sys.stdin.isatty()) or type == SyntaxError:
        sys.__excepthook__(type, value, tb)
    else:
        import traceback, pdb
        traceback.print_exception(type, value, tb)
        print
        pdb.pm()


sys.excepthook = debugexcept

Если вы запустите свой Программа python из командной строки вы должны быть выгружены в отладчик python, когда он умирает, предполагая, что что-то «плохое» вызвало исключение. Я предполагаю, что, возможно, stderr / stdout был захвачен, а вы не видите исключения?

т.е. ищите что-то вроде:

sys.stdout = open('stdout.log', 'w')
sys.stderr = open('stderr.log', 'w')

Если процесс умирает без исключения, то это может быть труднее найти. Один (очень сложный способ) для Windows - это использовать что-то вроде windbg, чтобы подключиться к процессу и установить точку останова в CRT в каком-то подходящем месте.

Удачи!

3
ответ дан 6 December 2019 в 15:20
поделиться
Другие вопросы по тегам:

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