Модуль faulthandler
содержит функции для явного дампинга трассировок Python, в случае сбоя, после тайм-аута или по сигналу пользователя.
Вызовите faulthandler.enable()
, чтобы установить обработчики ошибок для сигналов SIGSEGV
, SIGFPE
, SIGABRT
, SIGBUS
и SIGILL
. Можно также включить их при запуске, установив переменную среды PYTHONFAULTHANDLER
или используя параметр командной строки -X faulthandler
.
Обработчик сбоев совместим с обработчиками системных сбоев, такими как Apport
в Unix системах или обработчик сбоев Windows. Если доступна функция sigaltstack()
, то модуль использует альтернативный стек для обработчиков сигналов. Это позволяет выгружать трассировку даже при переполнении стека.
Обработчик сбоев вызывается в катастрофических случаях и поэтому может использовать только сигнально-безопасные функции (например, он не может выделять память в куче). Из-за этого ограничения дамп трассировки минимален по сравнению с обычными трассировками Python:
По умолчанию трассировка Python записывается в sys.stderr
. Чтобы увидеть трассировку, приложения должны быть запущены в терминале. Файл журнала можно также передать в функцию faulthandler.enable()
.
Модуль реализован на языке C
, поэтому трассировки могут быть сброшены при сбое или когда Python находится в зависшем состоянии.
Режим разработки Python вызывает функцию faulthandler.enable()
при запуске Python.
faulthandler
:Пример ошибки сегментации в Linux с включением обработчика ошибок и без него:
# без обработчика ошибок $ python3 -c "import ctypes; ctypes.string_at(0)" Segmentation fault # включаем обработчик ошибок $ python3 -q -X faulthandler >>> import ctypes >>> ctypes.string_at(0) Fatal Python error: Segmentation fault Current thread 0x00007fb899f39700 (most recent call first): File "/home/python/cpython/Lib/ctypes/__init__.py", line 486 in string_at File "<stdin>", line 1 in <module> Segmentation fault