Сообщить об ошибке.

Выгрузка трассировки стека при обработке ошибок faulthandler в Python

Ручная выгрузка трассировки, выгрузка по таймауту и по сигналу

В разделе рассмотрены различные способы выгрузки трассировки стека обработчика ошибок при отладке приложения при помощи модуля faulthandler.


Ручная выгрузка трассировки в файл.

faulthandler.dump_traceback(file=sys.stderr, all_threads=True):

Функция faulthandler.dump_traceback() выгрузит трассировку всех потоков в файл file. Если аргумент all_threads имеет значение False, то функция выгрузит только текущий поток.

Изменено в Python 3.5: Добавлена поддержка передачи дескриптора файла в эту функцию.

Выгрузка трассировок после тайм-аута

faulthandler.dump_traceback_later(timeout, repeat=False, file=sys.stderr, exit=False):

Функция faulthandler.dump_traceback_later() выгрузит трассировку всех потоков по истечении тайм-аута timeout в секундах или через каждый тайм-аут timeout, если аргумент repeat имеет значение True.

Если аргумент exit имеет значение True, вызовет _exit() со статусом status=1 после сброса трассировки. Обратите внимание, что _exit() немедленно завершает процесс, это означает, что не будет выполнятся никакой очистки, такой как очистка файловых буферов.

Если функция вызывается дважды, то новый вызов заменяет предыдущие параметры и сбрасывает время ожидания. Таймер имеет разрешение менее секунды.

Аргумент file должен оставаться открытым, пока не будет сброшен дамп трассировки или пока не будет вызвана faulthandler.cancel_dump_traceback_later(), иначе может возникнуть проблема с файловыми дескрипторами.

  • Изменено в Python 3.7: функция теперь всегда доступна.
  • Изменено в Python 3.5: Добавлена ​​поддержка передачи дескриптора файла.

faulthandler.cancel_dump_traceback_later():

Функция faulthandler.cancel_dump_traceback_later() отменяет последний вызов функции faulthandler.dump_traceback_later().

Сброс обратной трассировки по пользовательскому сигналу.

faulthandler.register(signum, file=sys.stderr, all_threads=True, chain=False):

Функция faulthandler.register() регистрирует пользовательский сигнал: устанавливает обработчик сигнала signum, чтобы вывести в файл file трассировку всех потоков или текущего потока, если аргумент all_threads имеет значение False. Вызывает предыдущий обработчик, если аргумент chain имеет значение True.

Файл file должен оставаться открытым до тех пор, пока сигнал не будет отменен функцией faulthandler.unregister(), иначе может возникнуть проблема с файловыми дескрипторами.

Недоступно в Windows.

Изменено в версии 3.5: Добавлена ​​поддержка передачи дескриптора файла.

faulthandler.unregister(signum):

Функция faulthandler.unregister() отменяет регистрацию сигнала пользователя: удаляет обработчик сигнала signum, установленный с помощью функции faulthandler.register().

Возвращает True, если сигнал был зарегистрирован, иначе False.

Недоступно в Windows.