17db96d56Sopenharmony_ci:mod:`faulthandler` --- Dump the Python traceback 27db96d56Sopenharmony_ci================================================= 37db96d56Sopenharmony_ci 47db96d56Sopenharmony_ci.. module:: faulthandler 57db96d56Sopenharmony_ci :synopsis: Dump the Python traceback. 67db96d56Sopenharmony_ci 77db96d56Sopenharmony_ci.. versionadded:: 3.3 87db96d56Sopenharmony_ci 97db96d56Sopenharmony_ci---------------- 107db96d56Sopenharmony_ci 117db96d56Sopenharmony_ciThis module contains functions to dump Python tracebacks explicitly, on a fault, 127db96d56Sopenharmony_ciafter a timeout, or on a user signal. Call :func:`faulthandler.enable` to 137db96d56Sopenharmony_ciinstall fault handlers for the :const:`SIGSEGV`, :const:`SIGFPE`, 147db96d56Sopenharmony_ci:const:`SIGABRT`, :const:`SIGBUS`, and :const:`SIGILL` signals. You can also 157db96d56Sopenharmony_cienable them at startup by setting the :envvar:`PYTHONFAULTHANDLER` environment 167db96d56Sopenharmony_civariable or by using the :option:`-X` ``faulthandler`` command line option. 177db96d56Sopenharmony_ci 187db96d56Sopenharmony_ciThe fault handler is compatible with system fault handlers like Apport or the 197db96d56Sopenharmony_ciWindows fault handler. The module uses an alternative stack for signal handlers 207db96d56Sopenharmony_ciif the :c:func:`sigaltstack` function is available. This allows it to dump the 217db96d56Sopenharmony_citraceback even on a stack overflow. 227db96d56Sopenharmony_ci 237db96d56Sopenharmony_ciThe fault handler is called on catastrophic cases and therefore can only use 247db96d56Sopenharmony_cisignal-safe functions (e.g. it cannot allocate memory on the heap). Because of 257db96d56Sopenharmony_cithis limitation traceback dumping is minimal compared to normal Python 267db96d56Sopenharmony_citracebacks: 277db96d56Sopenharmony_ci 287db96d56Sopenharmony_ci* Only ASCII is supported. The ``backslashreplace`` error handler is used on 297db96d56Sopenharmony_ci encoding. 307db96d56Sopenharmony_ci* Each string is limited to 500 characters. 317db96d56Sopenharmony_ci* Only the filename, the function name and the line number are 327db96d56Sopenharmony_ci displayed. (no source code) 337db96d56Sopenharmony_ci* It is limited to 100 frames and 100 threads. 347db96d56Sopenharmony_ci* The order is reversed: the most recent call is shown first. 357db96d56Sopenharmony_ci 367db96d56Sopenharmony_ciBy default, the Python traceback is written to :data:`sys.stderr`. To see 377db96d56Sopenharmony_citracebacks, applications must be run in the terminal. A log file can 387db96d56Sopenharmony_cialternatively be passed to :func:`faulthandler.enable`. 397db96d56Sopenharmony_ci 407db96d56Sopenharmony_ciThe module is implemented in C, so tracebacks can be dumped on a crash or when 417db96d56Sopenharmony_ciPython is deadlocked. 427db96d56Sopenharmony_ci 437db96d56Sopenharmony_ciThe :ref:`Python Development Mode <devmode>` calls :func:`faulthandler.enable` 447db96d56Sopenharmony_ciat Python startup. 457db96d56Sopenharmony_ci 467db96d56Sopenharmony_ci.. seealso:: 477db96d56Sopenharmony_ci 487db96d56Sopenharmony_ci Module :mod:`pdb` 497db96d56Sopenharmony_ci Interactive source code debugger for Python programs. 507db96d56Sopenharmony_ci 517db96d56Sopenharmony_ci Module :mod:`traceback` 527db96d56Sopenharmony_ci Standard interface to extract, format and print stack traces of Python programs. 537db96d56Sopenharmony_ci 547db96d56Sopenharmony_ciDumping the traceback 557db96d56Sopenharmony_ci--------------------- 567db96d56Sopenharmony_ci 577db96d56Sopenharmony_ci.. function:: dump_traceback(file=sys.stderr, all_threads=True) 587db96d56Sopenharmony_ci 597db96d56Sopenharmony_ci Dump the tracebacks of all threads into *file*. If *all_threads* is 607db96d56Sopenharmony_ci ``False``, dump only the current thread. 617db96d56Sopenharmony_ci 627db96d56Sopenharmony_ci .. seealso:: :func:`traceback.print_tb`, which can be used to print a traceback object. 637db96d56Sopenharmony_ci 647db96d56Sopenharmony_ci .. versionchanged:: 3.5 657db96d56Sopenharmony_ci Added support for passing file descriptor to this function. 667db96d56Sopenharmony_ci 677db96d56Sopenharmony_ci 687db96d56Sopenharmony_ciFault handler state 697db96d56Sopenharmony_ci------------------- 707db96d56Sopenharmony_ci 717db96d56Sopenharmony_ci.. function:: enable(file=sys.stderr, all_threads=True) 727db96d56Sopenharmony_ci 737db96d56Sopenharmony_ci Enable the fault handler: install handlers for the :const:`SIGSEGV`, 747db96d56Sopenharmony_ci :const:`SIGFPE`, :const:`SIGABRT`, :const:`SIGBUS` and :const:`SIGILL` 757db96d56Sopenharmony_ci signals to dump the Python traceback. If *all_threads* is ``True``, 767db96d56Sopenharmony_ci produce tracebacks for every running thread. Otherwise, dump only the current 777db96d56Sopenharmony_ci thread. 787db96d56Sopenharmony_ci 797db96d56Sopenharmony_ci The *file* must be kept open until the fault handler is disabled: see 807db96d56Sopenharmony_ci :ref:`issue with file descriptors <faulthandler-fd>`. 817db96d56Sopenharmony_ci 827db96d56Sopenharmony_ci .. versionchanged:: 3.5 837db96d56Sopenharmony_ci Added support for passing file descriptor to this function. 847db96d56Sopenharmony_ci 857db96d56Sopenharmony_ci .. versionchanged:: 3.6 867db96d56Sopenharmony_ci On Windows, a handler for Windows exception is also installed. 877db96d56Sopenharmony_ci 887db96d56Sopenharmony_ci .. versionchanged:: 3.10 897db96d56Sopenharmony_ci The dump now mentions if a garbage collector collection is running 907db96d56Sopenharmony_ci if *all_threads* is true. 917db96d56Sopenharmony_ci 927db96d56Sopenharmony_ci.. function:: disable() 937db96d56Sopenharmony_ci 947db96d56Sopenharmony_ci Disable the fault handler: uninstall the signal handlers installed by 957db96d56Sopenharmony_ci :func:`enable`. 967db96d56Sopenharmony_ci 977db96d56Sopenharmony_ci.. function:: is_enabled() 987db96d56Sopenharmony_ci 997db96d56Sopenharmony_ci Check if the fault handler is enabled. 1007db96d56Sopenharmony_ci 1017db96d56Sopenharmony_ci 1027db96d56Sopenharmony_ciDumping the tracebacks after a timeout 1037db96d56Sopenharmony_ci-------------------------------------- 1047db96d56Sopenharmony_ci 1057db96d56Sopenharmony_ci.. function:: dump_traceback_later(timeout, repeat=False, file=sys.stderr, exit=False) 1067db96d56Sopenharmony_ci 1077db96d56Sopenharmony_ci Dump the tracebacks of all threads, after a timeout of *timeout* seconds, or 1087db96d56Sopenharmony_ci every *timeout* seconds if *repeat* is ``True``. If *exit* is ``True``, call 1097db96d56Sopenharmony_ci :c:func:`_exit` with status=1 after dumping the tracebacks. (Note 1107db96d56Sopenharmony_ci :c:func:`_exit` exits the process immediately, which means it doesn't do any 1117db96d56Sopenharmony_ci cleanup like flushing file buffers.) If the function is called twice, the new 1127db96d56Sopenharmony_ci call replaces previous parameters and resets the timeout. The timer has a 1137db96d56Sopenharmony_ci sub-second resolution. 1147db96d56Sopenharmony_ci 1157db96d56Sopenharmony_ci The *file* must be kept open until the traceback is dumped or 1167db96d56Sopenharmony_ci :func:`cancel_dump_traceback_later` is called: see :ref:`issue with file 1177db96d56Sopenharmony_ci descriptors <faulthandler-fd>`. 1187db96d56Sopenharmony_ci 1197db96d56Sopenharmony_ci This function is implemented using a watchdog thread. 1207db96d56Sopenharmony_ci 1217db96d56Sopenharmony_ci .. versionchanged:: 3.7 1227db96d56Sopenharmony_ci This function is now always available. 1237db96d56Sopenharmony_ci 1247db96d56Sopenharmony_ci .. versionchanged:: 3.5 1257db96d56Sopenharmony_ci Added support for passing file descriptor to this function. 1267db96d56Sopenharmony_ci 1277db96d56Sopenharmony_ci.. function:: cancel_dump_traceback_later() 1287db96d56Sopenharmony_ci 1297db96d56Sopenharmony_ci Cancel the last call to :func:`dump_traceback_later`. 1307db96d56Sopenharmony_ci 1317db96d56Sopenharmony_ci 1327db96d56Sopenharmony_ciDumping the traceback on a user signal 1337db96d56Sopenharmony_ci-------------------------------------- 1347db96d56Sopenharmony_ci 1357db96d56Sopenharmony_ci.. function:: register(signum, file=sys.stderr, all_threads=True, chain=False) 1367db96d56Sopenharmony_ci 1377db96d56Sopenharmony_ci Register a user signal: install a handler for the *signum* signal to dump 1387db96d56Sopenharmony_ci the traceback of all threads, or of the current thread if *all_threads* is 1397db96d56Sopenharmony_ci ``False``, into *file*. Call the previous handler if chain is ``True``. 1407db96d56Sopenharmony_ci 1417db96d56Sopenharmony_ci The *file* must be kept open until the signal is unregistered by 1427db96d56Sopenharmony_ci :func:`unregister`: see :ref:`issue with file descriptors <faulthandler-fd>`. 1437db96d56Sopenharmony_ci 1447db96d56Sopenharmony_ci Not available on Windows. 1457db96d56Sopenharmony_ci 1467db96d56Sopenharmony_ci .. versionchanged:: 3.5 1477db96d56Sopenharmony_ci Added support for passing file descriptor to this function. 1487db96d56Sopenharmony_ci 1497db96d56Sopenharmony_ci.. function:: unregister(signum) 1507db96d56Sopenharmony_ci 1517db96d56Sopenharmony_ci Unregister a user signal: uninstall the handler of the *signum* signal 1527db96d56Sopenharmony_ci installed by :func:`register`. Return ``True`` if the signal was registered, 1537db96d56Sopenharmony_ci ``False`` otherwise. 1547db96d56Sopenharmony_ci 1557db96d56Sopenharmony_ci Not available on Windows. 1567db96d56Sopenharmony_ci 1577db96d56Sopenharmony_ci 1587db96d56Sopenharmony_ci.. _faulthandler-fd: 1597db96d56Sopenharmony_ci 1607db96d56Sopenharmony_ciIssue with file descriptors 1617db96d56Sopenharmony_ci--------------------------- 1627db96d56Sopenharmony_ci 1637db96d56Sopenharmony_ci:func:`enable`, :func:`dump_traceback_later` and :func:`register` keep the 1647db96d56Sopenharmony_cifile descriptor of their *file* argument. If the file is closed and its file 1657db96d56Sopenharmony_cidescriptor is reused by a new file, or if :func:`os.dup2` is used to replace 1667db96d56Sopenharmony_cithe file descriptor, the traceback will be written into a different file. Call 1677db96d56Sopenharmony_cithese functions again each time that the file is replaced. 1687db96d56Sopenharmony_ci 1697db96d56Sopenharmony_ci 1707db96d56Sopenharmony_ciExample 1717db96d56Sopenharmony_ci------- 1727db96d56Sopenharmony_ci 1737db96d56Sopenharmony_ciExample of a segmentation fault on Linux with and without enabling the fault 1747db96d56Sopenharmony_cihandler: 1757db96d56Sopenharmony_ci 1767db96d56Sopenharmony_ci.. code-block:: shell-session 1777db96d56Sopenharmony_ci 1787db96d56Sopenharmony_ci $ python3 -c "import ctypes; ctypes.string_at(0)" 1797db96d56Sopenharmony_ci Segmentation fault 1807db96d56Sopenharmony_ci 1817db96d56Sopenharmony_ci $ python3 -q -X faulthandler 1827db96d56Sopenharmony_ci >>> import ctypes 1837db96d56Sopenharmony_ci >>> ctypes.string_at(0) 1847db96d56Sopenharmony_ci Fatal Python error: Segmentation fault 1857db96d56Sopenharmony_ci 1867db96d56Sopenharmony_ci Current thread 0x00007fb899f39700 (most recent call first): 1877db96d56Sopenharmony_ci File "/home/python/cpython/Lib/ctypes/__init__.py", line 486 in string_at 1887db96d56Sopenharmony_ci File "<stdin>", line 1 in <module> 1897db96d56Sopenharmony_ci Segmentation fault 190