Victor Stinner | 024e37a | 2011-03-31 01:31:06 +0200 | [diff] [blame] | 1 | :mod:`faulthandler` --- Dump the Python traceback |
| 2 | ================================================= |
| 3 | |
| 4 | .. module:: faulthandler |
| 5 | :synopsis: Dump the Python traceback. |
| 6 | |
| 7 | This module contains functions to dump the Python traceback explicitly, on a |
| 8 | fault, after a timeout or on a user signal. Call :func:`faulthandler.enable` to |
Victor Stinner | d727e23 | 2011-04-01 12:13:55 +0200 | [diff] [blame] | 9 | install fault handlers for :const:`SIGSEGV`, :const:`SIGFPE`, :const:`SIGABRT`, |
| 10 | :const:`SIGBUS` and :const:`SIGILL` signals. You can also enable them at |
| 11 | startup by setting the :envvar:`PYTHONFAULTHANDLER` environment variable or by |
| 12 | using :option:`-X` ``faulthandler`` command line option. |
Victor Stinner | 024e37a | 2011-03-31 01:31:06 +0200 | [diff] [blame] | 13 | |
| 14 | The fault handler is compatible with system fault handlers like Apport or |
| 15 | the Windows fault handler. The module uses an alternative stack for signal |
| 16 | handlers, if the :c:func:`sigaltstack` function is available, to be able to |
| 17 | dump the traceback even on a stack overflow. |
| 18 | |
| 19 | The fault handler is called on catastrophic cases and so can only use |
| 20 | signal-safe functions (e.g. it cannot allocate memory on the heap). That's why |
| 21 | the traceback is limited: only support ASCII encoding (use the |
| 22 | ``backslashreplace`` error handler), limit each string to 100 characters, don't |
| 23 | print the source code (only the filename, the function name and the line |
| 24 | number), limit to 100 frames and 100 threads. |
| 25 | |
| 26 | By default, the Python traceback is written to :data:`sys.stderr`. Start your |
| 27 | graphical applications in a terminal and run your server in foreground to see |
| 28 | the traceback, or specify a log file to :func:`faulthandler.enable()`. |
| 29 | |
| 30 | The module is implemented in C to be able to dump a traceback on a crash or |
| 31 | when Python is blocked (e.g. deadlock). |
| 32 | |
| 33 | .. versionadded:: 3.3 |
| 34 | |
| 35 | |
| 36 | Dump the traceback |
| 37 | ------------------ |
| 38 | |
| 39 | .. function:: dump_traceback(file=sys.stderr, all_threads=False) |
| 40 | |
| 41 | Dump the traceback of the current thread, or of all threads if *all_threads* |
| 42 | is ``True``, into *file*. |
| 43 | |
| 44 | |
| 45 | Fault handler state |
| 46 | ------------------- |
| 47 | |
| 48 | .. function:: enable(file=sys.stderr, all_threads=False) |
| 49 | |
| 50 | Enable the fault handler: install handlers for :const:`SIGSEGV`, |
Victor Stinner | d727e23 | 2011-04-01 12:13:55 +0200 | [diff] [blame] | 51 | :const:`SIGFPE`, :const:`SIGABRT`, :const:`SIGBUS` and :const:`SIGILL` |
| 52 | signals to dump the Python traceback. It dumps the traceback of the current |
| 53 | thread, or all threads if *all_threads* is ``True``, into *file*. |
Victor Stinner | 024e37a | 2011-03-31 01:31:06 +0200 | [diff] [blame] | 54 | |
| 55 | .. function:: disable() |
| 56 | |
| 57 | Disable the fault handler: uninstall the signal handlers installed by |
| 58 | :func:`enable`. |
| 59 | |
| 60 | .. function:: is_enabled() |
| 61 | |
| 62 | Check if the fault handler is enabled. |
| 63 | |
| 64 | |
| 65 | Dump the tracebacks after a timeout |
| 66 | ----------------------------------- |
| 67 | |
| 68 | .. function:: dump_tracebacks_later(timeout, repeat=False, file=sys.stderr, exit=False) |
| 69 | |
| 70 | Dump the tracebacks of all threads, after a timeout of *timeout* seconds, or |
| 71 | each *timeout* seconds if *repeat* is ``True``. If *exit* is True, call |
Georg Brandl | 7098685 | 2011-04-01 09:19:57 +0200 | [diff] [blame] | 72 | :c:func:`_exit` with status=1 after dumping the tracebacks to terminate |
| 73 | immediatly the process, which is not safe. For example, :c:func:`_exit` |
Victor Stinner | 024e37a | 2011-03-31 01:31:06 +0200 | [diff] [blame] | 74 | doesn't flush file buffers. If the function is called twice, the new call |
| 75 | replaces previous parameters (resets the timeout). The timer has a |
| 76 | sub-second resolution. |
| 77 | |
| 78 | This function is implemented using a watchdog thread, and therefore is |
| 79 | not available if Python is compiled with threads disabled. |
| 80 | |
Victor Stinner | 702624e | 2011-03-31 03:42:34 +0200 | [diff] [blame] | 81 | .. function:: cancel_dump_tracebacks_later() |
Victor Stinner | 024e37a | 2011-03-31 01:31:06 +0200 | [diff] [blame] | 82 | |
Victor Stinner | 702624e | 2011-03-31 03:42:34 +0200 | [diff] [blame] | 83 | Cancel the last call to :func:`dump_tracebacks_later`. |
Victor Stinner | 024e37a | 2011-03-31 01:31:06 +0200 | [diff] [blame] | 84 | |
| 85 | |
| 86 | Dump the traceback on a user signal |
| 87 | ----------------------------------- |
| 88 | |
| 89 | .. function:: register(signum, file=sys.stderr, all_threads=False) |
| 90 | |
| 91 | Register a user signal: install a handler for the *signum* signal to dump |
| 92 | the traceback of the current thread, or of all threads if *all_threads* is |
| 93 | ``True``, into *file*. |
| 94 | |
| 95 | Not available on Windows. |
| 96 | |
| 97 | .. function:: unregister(signum) |
| 98 | |
| 99 | Unregister a user signal: uninstall the handler of the *signum* signal |
Victor Stinner | cfa7123 | 2011-04-08 12:48:15 +0200 | [diff] [blame] | 100 | installed by :func:`register`. Return ``True`` if the signal was registered, |
| 101 | ``False`` otherwise. |
Victor Stinner | 024e37a | 2011-03-31 01:31:06 +0200 | [diff] [blame] | 102 | |
| 103 | Not available on Windows. |
| 104 | |
| 105 | |
| 106 | File descriptor issue |
| 107 | --------------------- |
| 108 | |
Victor Stinner | 702624e | 2011-03-31 03:42:34 +0200 | [diff] [blame] | 109 | :func:`enable`, :func:`dump_tracebacks_later` and :func:`register` keep the |
Victor Stinner | 024e37a | 2011-03-31 01:31:06 +0200 | [diff] [blame] | 110 | file descriptor of their *file* argument. If the file is closed and its file |
| 111 | descriptor is reused by a new file, or if :func:`os.dup2` is used to replace |
| 112 | the file descriptor, the traceback will be written into a different file. Call |
| 113 | these functions again each time that the file is replaced. |
| 114 | |
| 115 | |
| 116 | Example |
| 117 | ------- |
| 118 | |
| 119 | Example of a segmentation fault on Linux: :: |
| 120 | |
| 121 | $ python -q -X faulthandler |
| 122 | >>> import ctypes |
| 123 | >>> ctypes.string_at(0) |
| 124 | Fatal Python error: Segmentation fault |
| 125 | |
| 126 | Traceback (most recent call first): |
| 127 | File "/home/python/cpython/Lib/ctypes/__init__.py", line 486 in string_at |
| 128 | File "<stdin>", line 1 in <module> |
| 129 | Segmentation fault |
| 130 | |