add files
This commit is contained in:
172
python-3.7.4-docs-html/_sources/library/faulthandler.rst.txt
Normal file
172
python-3.7.4-docs-html/_sources/library/faulthandler.rst.txt
Normal file
@@ -0,0 +1,172 @@
|
||||
:mod:`faulthandler` --- Dump the Python traceback
|
||||
=================================================
|
||||
|
||||
.. module:: faulthandler
|
||||
:synopsis: Dump the Python traceback.
|
||||
|
||||
.. versionadded:: 3.3
|
||||
|
||||
----------------
|
||||
|
||||
This module contains functions to dump Python tracebacks explicitly, on a fault,
|
||||
after a timeout, or on a user signal. Call :func:`faulthandler.enable` to
|
||||
install fault handlers for the :const:`SIGSEGV`, :const:`SIGFPE`,
|
||||
:const:`SIGABRT`, :const:`SIGBUS`, and :const:`SIGILL` signals. You can also
|
||||
enable them at startup by setting the :envvar:`PYTHONFAULTHANDLER` environment
|
||||
variable or by using the :option:`-X` ``faulthandler`` command line option.
|
||||
|
||||
The fault handler is compatible with system fault handlers like Apport or the
|
||||
Windows fault handler. The module uses an alternative stack for signal handlers
|
||||
if the :c:func:`sigaltstack` function is available. This allows it to dump the
|
||||
traceback even on a stack overflow.
|
||||
|
||||
The fault handler is called on catastrophic cases and therefore can only use
|
||||
signal-safe functions (e.g. it cannot allocate memory on the heap). Because of
|
||||
this limitation traceback dumping is minimal compared to normal Python
|
||||
tracebacks:
|
||||
|
||||
* Only ASCII is supported. The ``backslashreplace`` error handler is used on
|
||||
encoding.
|
||||
* Each string is limited to 500 characters.
|
||||
* Only the filename, the function name and the line number are
|
||||
displayed. (no source code)
|
||||
* It is limited to 100 frames and 100 threads.
|
||||
* The order is reversed: the most recent call is shown first.
|
||||
|
||||
By default, the Python traceback is written to :data:`sys.stderr`. To see
|
||||
tracebacks, applications must be run in the terminal. A log file can
|
||||
alternatively be passed to :func:`faulthandler.enable`.
|
||||
|
||||
The module is implemented in C, so tracebacks can be dumped on a crash or when
|
||||
Python is deadlocked.
|
||||
|
||||
|
||||
Dumping the traceback
|
||||
---------------------
|
||||
|
||||
.. function:: dump_traceback(file=sys.stderr, all_threads=True)
|
||||
|
||||
Dump the tracebacks of all threads into *file*. If *all_threads* is
|
||||
``False``, dump only the current thread.
|
||||
|
||||
.. versionchanged:: 3.5
|
||||
Added support for passing file descriptor to this function.
|
||||
|
||||
|
||||
Fault handler state
|
||||
-------------------
|
||||
|
||||
.. function:: enable(file=sys.stderr, all_threads=True)
|
||||
|
||||
Enable the fault handler: install handlers for the :const:`SIGSEGV`,
|
||||
:const:`SIGFPE`, :const:`SIGABRT`, :const:`SIGBUS` and :const:`SIGILL`
|
||||
signals to dump the Python traceback. If *all_threads* is ``True``,
|
||||
produce tracebacks for every running thread. Otherwise, dump only the current
|
||||
thread.
|
||||
|
||||
The *file* must be kept open until the fault handler is disabled: see
|
||||
:ref:`issue with file descriptors <faulthandler-fd>`.
|
||||
|
||||
.. versionchanged:: 3.5
|
||||
Added support for passing file descriptor to this function.
|
||||
|
||||
.. versionchanged:: 3.6
|
||||
On Windows, a handler for Windows exception is also installed.
|
||||
|
||||
.. function:: disable()
|
||||
|
||||
Disable the fault handler: uninstall the signal handlers installed by
|
||||
:func:`enable`.
|
||||
|
||||
.. function:: is_enabled()
|
||||
|
||||
Check if the fault handler is enabled.
|
||||
|
||||
|
||||
Dumping the tracebacks after a timeout
|
||||
--------------------------------------
|
||||
|
||||
.. function:: dump_traceback_later(timeout, repeat=False, file=sys.stderr, exit=False)
|
||||
|
||||
Dump the tracebacks of all threads, after a timeout of *timeout* seconds, or
|
||||
every *timeout* seconds if *repeat* is ``True``. If *exit* is ``True``, call
|
||||
:c:func:`_exit` with status=1 after dumping the tracebacks. (Note
|
||||
:c:func:`_exit` exits the process immediately, which means it doesn't do any
|
||||
cleanup like flushing file buffers.) If the function is called twice, the new
|
||||
call replaces previous parameters and resets the timeout. The timer has a
|
||||
sub-second resolution.
|
||||
|
||||
The *file* must be kept open until the traceback is dumped or
|
||||
:func:`cancel_dump_traceback_later` is called: see :ref:`issue with file
|
||||
descriptors <faulthandler-fd>`.
|
||||
|
||||
This function is implemented using a watchdog thread and therefore is not
|
||||
available if Python is compiled with threads disabled.
|
||||
|
||||
.. versionchanged:: 3.5
|
||||
Added support for passing file descriptor to this function.
|
||||
|
||||
.. function:: cancel_dump_traceback_later()
|
||||
|
||||
Cancel the last call to :func:`dump_traceback_later`.
|
||||
|
||||
|
||||
Dumping the traceback on a user signal
|
||||
--------------------------------------
|
||||
|
||||
.. function:: register(signum, file=sys.stderr, all_threads=True, chain=False)
|
||||
|
||||
Register a user signal: install a handler for the *signum* signal to dump
|
||||
the traceback of all threads, or of the current thread if *all_threads* is
|
||||
``False``, into *file*. Call the previous handler if chain is ``True``.
|
||||
|
||||
The *file* must be kept open until the signal is unregistered by
|
||||
:func:`unregister`: see :ref:`issue with file descriptors <faulthandler-fd>`.
|
||||
|
||||
Not available on Windows.
|
||||
|
||||
.. versionchanged:: 3.5
|
||||
Added support for passing file descriptor to this function.
|
||||
|
||||
.. function:: unregister(signum)
|
||||
|
||||
Unregister a user signal: uninstall the handler of the *signum* signal
|
||||
installed by :func:`register`. Return ``True`` if the signal was registered,
|
||||
``False`` otherwise.
|
||||
|
||||
Not available on Windows.
|
||||
|
||||
|
||||
.. _faulthandler-fd:
|
||||
|
||||
Issue with file descriptors
|
||||
---------------------------
|
||||
|
||||
:func:`enable`, :func:`dump_traceback_later` and :func:`register` keep the
|
||||
file descriptor of their *file* argument. If the file is closed and its file
|
||||
descriptor is reused by a new file, or if :func:`os.dup2` is used to replace
|
||||
the file descriptor, the traceback will be written into a different file. Call
|
||||
these functions again each time that the file is replaced.
|
||||
|
||||
|
||||
Example
|
||||
-------
|
||||
|
||||
Example of a segmentation fault on Linux with and without enabling the fault
|
||||
handler:
|
||||
|
||||
.. code-block:: shell-session
|
||||
|
||||
$ 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
|
||||
|
Reference in New Issue
Block a user