| fatal_error |
|
|
|
| . enabled |
module |
faulthandler_is_enabled() |
faulthandler_disable_py() |
|
signal |
faulthandler_fatal_error() |
|
|
internal |
faulthandler_enable() faulthandler_disable() |
faulthandler_enable() faulthandler_disable() |
| . file |
module |
faulthandler_traverse() |
faulthandler_py_enable() faulthandler_traverse() |
|
internal |
faulthandler_disable() |
faulthandler_disable() |
| . fd |
|
module |
|
|
signal |
faulthandler_fatal_error() faulthandler_exc_handler() |
|
| . all_threads |
module |
|
faulthandler_py_enable() |
|
signal |
faulthandler_fatal_error() faulthandler_exc_handler() |
|
| . interp |
module |
|
faulthandler_py_enable() |
|
internal |
faulthandler_fatal_error() faulthandler_exc_handler() |
|
| . exc_handler |
internal |
faulthandler_enable() faulthandler_disable() |
faulthandler_enable() faulthandler_disable() |
|
|
|
|
name |
context |
get |
set |
| thread |
|
|
|
| . file |
module |
faulthandler_dump_traceback_later() faulthandler_traverse() |
faulthandler_dump_traceback_later() faulthandler_traverse() |
|
internal |
cancel_dump_traceback_later() |
cancel_dump_traceback_later() |
| . fd |
|
|
|
| module |
|
faulthandler_dump_traceback_later() |
|
|
thread |
faulthandler_thread() |
|
| . timeout_us |
module |
|
faulthandler_dump_traceback_later() |
|
thread |
faulthandler_thread() |
|
| . repeat |
module |
|
faulthandler_dump_traceback_later() |
|
thread |
faulthandler_thread() |
|
| . interp |
module |
|
faulthandler_dump_traceback_later() |
|
thread |
faulthandler_thread() |
|
| . exit |
module |
|
faulthandler_dump_traceback_later() |
|
thread |
faulthandler_thread() |
|
| . header |
module |
|
faulthandler_dump_traceback_later() |
|
thread |
faulthandler_thread() |
|
|
internal |
cancel_dump_traceback_later() |
cancel_dump_traceback_later() |
| . header_len |
module |
|
faulthandler_dump_traceback_later() |
|
thread |
faulthandler_thread() |
|
| . cancel_event |
module |
faulthandler_dump_traceback_later() |
faulthandler_dump_traceback_later() |
|
thread |
faulthandler_thread() |
|
|
internal |
cancel_dump_traceback_later() |
|
| . running |
module |
faulthandler_dump_traceback_later() |
faulthandler_dump_traceback_later() |
|
thread |
faulthandler_thread() |
|
|
internal |
cancel_dump_traceback_later() |
|
name |
context |
get |
set |
| user_signals |
module |
faulthandler_register_py() faulthandler_unregister_py() |
faulthandler_register_py() faulthandler_traverse() |
|
C-API |
_PyFaulthandler_Fini() |
_PyFaulthandler_Fini() |
|
signal |
faulthandler_user() |
|
| user_signals[signum] |
|
|
|
| . enabled |
module |
faulthandler_register_py() |
faulthandler_register_py() |
|
signal |
faulthandler_user() |
|
|
internal |
faulthandler_unregister() |
faulthandler_unregister() |
| . file |
module |
faulthandler_register_py() faulthandler_traverse() |
faulthandler_register_py() faulthandler_traverse() |
|
internal |
faulthandler_unregister() |
faulthandler_unregister() |
| . fd |
module |
|
faulthandler_register_py() |
|
signal |
faulthandler_user() |
|
|
internal |
|
faulthandler_unregister() |
| . all_threads |
module |
|
faulthandler_register_py() |
|
signal |
faulthandler_user() |
|
| . chain |
module |
|
faulthandler_register_py() |
|
signal |
faulthandler_user() |
|
| . previous |
module |
|
faulthandler_register_py() |
|
signal |
faulthandler_user() |
|
|
internal |
faulthandler_unregister() |
|
| . interp |
module |
|
faulthandler_register_py() |
|
signal |
faulthandler_user() |
|
name |
context |
get |
set |
| stack |
C-API |
_PyFaulthandler_Init() _PyFaulthandler_Fini() |
|
|
internal |
faulthandler_enable() faulthandler_register() faulthandler_allocate_stack() |
|
| old_stack |
C-API |
_PyFaulthandler_Fini() |
|
(See gh-100227.)
Currently the faulthandler module has some state in _PyRuntimeState, including objects, which is shared by all interpreters. Interpreters should be isolated from each other, for a variety of reasons (including the possibility of a per-interpreter GIL). Isolating the module will involve moving some of the state to PyInterpreterState (and, under per-interpreter GIL, guarding other state with a global lock).
Code Analysis:
(expand)Signals
The module installs handlers for various signals.
(expand)fatal:
"user":
handlers:
State
Fields
https://github.com/python/cpython/blob/main/Include/internal/pycore_faulthandler.h#L49-L86
rawhttps://github.com/python/cpython/blob/main/Include/internal/pycore_runtime.h#L146
cpython/Include/internal/pycore_faulthandler.h
Lines 49 to 86 in 62251c3
cpython/Include/internal/pycore_faulthandler.h
Lines 36 to 46 in 62251c3
name
type
#ifdef
notes
the one that enabled faulthandler
name
type
#ifdef
notes
the one that requested the info
name
type
#ifdef
notes
the one that added the handler
name
type
#ifdef
notes
Usage
simple:name
context
get
set
faulthandler_disable()
faulthandler_disable()
faulthandler_traverse()
faulthandler_exc_handler()
faulthandler_exc_handler()
faulthandler_exc_handler()
faulthandler_disable()
faulthandler_disable()
name
context
get
set
faulthandler_traverse()
faulthandler_traverse()
name
context
get
set
faulthandler_unregister_py()
faulthandler_traverse()
faulthandler_traverse()
faulthandler_traverse()
name
context
get
set
_PyFaulthandler_Fini()
faulthandler_register()
faulthandler_allocate_stack()
name
context
calls
faulthandler_fatal_error() -> _Py_DumpExtensionModules()
faulthandler_exc_handler()
faulthandler_exc_handler() -> _Py_DumpHexadecimal()
faulthandler_exc_handler() -> faulthandler_dump_traceback()
faulthandler_thread() -> _Py_DumpTracebackThreads()
_PyFaulthandler_Fini()