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