blob: 3a5badd0ffa34860122eb89e2eb992a409a24809 [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
Georg Brandldf48b972014-03-24 09:06:18 +01007.. versionadded:: 3.3
8
Benjamin Peterson85198752011-06-17 19:54:52 -05009This module contains functions to dump Python tracebacks explicitly, on a fault,
10after a timeout, or on a user signal. Call :func:`faulthandler.enable` to
11install fault handlers for the :const:`SIGSEGV`, :const:`SIGFPE`,
12:const:`SIGABRT`, :const:`SIGBUS`, and :const:`SIGILL` signals. You can also
13enable them at startup by setting the :envvar:`PYTHONFAULTHANDLER` environment
Victor Stinner215ad662014-03-25 12:33:56 +010014variable or by using the :option:`-X` ``faulthandler`` command line option.
Victor Stinner024e37a2011-03-31 01:31:06 +020015
Benjamin Peterson85198752011-06-17 19:54:52 -050016The fault handler is compatible with system fault handlers like Apport or the
17Windows fault handler. The module uses an alternative stack for signal handlers
18if the :c:func:`sigaltstack` function is available. This allows it to dump the
19traceback even on a stack overflow.
Victor Stinner024e37a2011-03-31 01:31:06 +020020
Benjamin Peterson85198752011-06-17 19:54:52 -050021The fault handler is called on catastrophic cases and therefore can only use
22signal-safe functions (e.g. it cannot allocate memory on the heap). Because of
23this limitation traceback dumping is minimal compared to normal Python
24tracebacks:
Victor Stinner024e37a2011-03-31 01:31:06 +020025
Benjamin Peterson85198752011-06-17 19:54:52 -050026* Only ASCII is supported. The ``backslashreplace`` error handler is used on
27 encoding.
Victor Stinner1713f9a2012-07-31 03:25:28 +020028* Each string is limited to 500 characters.
Victor Stinner2510d9e2011-06-19 16:07:20 +020029* Only the filename, the function name and the line number are
Benjamin Peterson85198752011-06-17 19:54:52 -050030 displayed. (no source code)
31* It is limited to 100 frames and 100 threads.
Guido van Rossum2063aaf2013-10-20 19:15:19 -070032* The order is reversed: the most recent call is shown first.
Victor Stinner024e37a2011-03-31 01:31:06 +020033
Benjamin Peterson85198752011-06-17 19:54:52 -050034By default, the Python traceback is written to :data:`sys.stderr`. To see
35tracebacks, applications must be run in the terminal. A log file can
36alternatively be passed to :func:`faulthandler.enable`.
37
38The module is implemented in C, so tracebacks can be dumped on a crash or when
39Python is deadlocked.
Victor Stinner024e37a2011-03-31 01:31:06 +020040
Victor Stinner024e37a2011-03-31 01:31:06 +020041
Victor Stinner215ad662014-03-25 12:33:56 +010042Dumping the traceback
43---------------------
Victor Stinner024e37a2011-03-31 01:31:06 +020044
Victor Stinner7bba62f2011-05-07 12:43:00 +020045.. function:: dump_traceback(file=sys.stderr, all_threads=True)
Victor Stinner024e37a2011-03-31 01:31:06 +020046
Benjamin Petersondefe6f62011-06-19 09:37:18 -050047 Dump the tracebacks of all threads into *file*. If *all_threads* is
48 ``False``, dump only the current thread.
Victor Stinner024e37a2011-03-31 01:31:06 +020049
Victor Stinner95bb7142015-03-12 15:32:03 +010050 .. versionchanged:: 3.5
51 Added support for passing file descriptor to this function.
52
Victor Stinner024e37a2011-03-31 01:31:06 +020053
54Fault handler state
55-------------------
56
Victor Stinner7bba62f2011-05-07 12:43:00 +020057.. function:: enable(file=sys.stderr, all_threads=True)
Victor Stinner024e37a2011-03-31 01:31:06 +020058
Benjamin Peterson85198752011-06-17 19:54:52 -050059 Enable the fault handler: install handlers for the :const:`SIGSEGV`,
Victor Stinnerd727e232011-04-01 12:13:55 +020060 :const:`SIGFPE`, :const:`SIGABRT`, :const:`SIGBUS` and :const:`SIGILL`
Benjamin Peterson85198752011-06-17 19:54:52 -050061 signals to dump the Python traceback. If *all_threads* is ``True``,
62 produce tracebacks for every running thread. Otherwise, dump only the current
63 thread.
Victor Stinner024e37a2011-03-31 01:31:06 +020064
Victor Stinner95bb7142015-03-12 15:32:03 +010065 The *file* must be kept open until the fault handler is disabled: see
66 :ref:`issue with file descriptors <faulthandler-fd>`.
67
68 .. versionchanged:: 3.5
69 Added support for passing file descriptor to this function.
70
Victor Stinner024e37a2011-03-31 01:31:06 +020071.. function:: disable()
72
73 Disable the fault handler: uninstall the signal handlers installed by
74 :func:`enable`.
75
76.. function:: is_enabled()
77
78 Check if the fault handler is enabled.
79
80
Victor Stinner215ad662014-03-25 12:33:56 +010081Dumping the tracebacks after a timeout
82--------------------------------------
Victor Stinner024e37a2011-03-31 01:31:06 +020083
Georg Brandldeb92b52012-09-22 08:58:55 +020084.. function:: dump_traceback_later(timeout, repeat=False, file=sys.stderr, exit=False)
Victor Stinner024e37a2011-03-31 01:31:06 +020085
86 Dump the tracebacks of all threads, after a timeout of *timeout* seconds, or
Benjamin Peterson85198752011-06-17 19:54:52 -050087 every *timeout* seconds if *repeat* is ``True``. If *exit* is ``True``, call
88 :c:func:`_exit` with status=1 after dumping the tracebacks. (Note
Benjamin Petersondefe6f62011-06-19 09:37:18 -050089 :c:func:`_exit` exits the process immediately, which means it doesn't do any
90 cleanup like flushing file buffers.) If the function is called twice, the new
91 call replaces previous parameters and resets the timeout. The timer has a
92 sub-second resolution.
Victor Stinner024e37a2011-03-31 01:31:06 +020093
Victor Stinner95bb7142015-03-12 15:32:03 +010094 The *file* must be kept open until the traceback is dumped or
95 :func:`cancel_dump_traceback_later` is called: see :ref:`issue with file
96 descriptors <faulthandler-fd>`.
97
Benjamin Peterson85198752011-06-17 19:54:52 -050098 This function is implemented using a watchdog thread and therefore is not
99 available if Python is compiled with threads disabled.
Victor Stinner024e37a2011-03-31 01:31:06 +0200100
Victor Stinner95bb7142015-03-12 15:32:03 +0100101 .. versionchanged:: 3.5
102 Added support for passing file descriptor to this function.
103
Georg Brandldeb92b52012-09-22 08:58:55 +0200104.. function:: cancel_dump_traceback_later()
Victor Stinner024e37a2011-03-31 01:31:06 +0200105
Georg Brandldeb92b52012-09-22 08:58:55 +0200106 Cancel the last call to :func:`dump_traceback_later`.
Victor Stinner024e37a2011-03-31 01:31:06 +0200107
108
Victor Stinner215ad662014-03-25 12:33:56 +0100109Dumping the traceback on a user signal
110--------------------------------------
Victor Stinner024e37a2011-03-31 01:31:06 +0200111
Victor Stinnera9a9dab2011-07-13 23:39:53 +0200112.. function:: register(signum, file=sys.stderr, all_threads=True, chain=False)
Victor Stinner024e37a2011-03-31 01:31:06 +0200113
114 Register a user signal: install a handler for the *signum* signal to dump
Victor Stinner7bba62f2011-05-07 12:43:00 +0200115 the traceback of all threads, or of the current thread if *all_threads* is
Victor Stinnera9a9dab2011-07-13 23:39:53 +0200116 ``False``, into *file*. Call the previous handler if chain is ``True``.
Victor Stinner024e37a2011-03-31 01:31:06 +0200117
Victor Stinner95bb7142015-03-12 15:32:03 +0100118 The *file* must be kept open until the signal is unregistered by
119 :func:`unregister`: see :ref:`issue with file descriptors <faulthandler-fd>`.
120
Victor Stinner024e37a2011-03-31 01:31:06 +0200121 Not available on Windows.
122
Victor Stinner95bb7142015-03-12 15:32:03 +0100123 .. versionchanged:: 3.5
124 Added support for passing file descriptor to this function.
125
Victor Stinner024e37a2011-03-31 01:31:06 +0200126.. function:: unregister(signum)
127
128 Unregister a user signal: uninstall the handler of the *signum* signal
Victor Stinnercfa71232011-04-08 12:48:15 +0200129 installed by :func:`register`. Return ``True`` if the signal was registered,
130 ``False`` otherwise.
Victor Stinner024e37a2011-03-31 01:31:06 +0200131
132 Not available on Windows.
133
134
Victor Stinner95bb7142015-03-12 15:32:03 +0100135.. _faulthandler-fd:
136
Victor Stinner215ad662014-03-25 12:33:56 +0100137Issue with file descriptors
138---------------------------
Victor Stinner024e37a2011-03-31 01:31:06 +0200139
Georg Brandldeb92b52012-09-22 08:58:55 +0200140:func:`enable`, :func:`dump_traceback_later` and :func:`register` keep the
Victor Stinner024e37a2011-03-31 01:31:06 +0200141file descriptor of their *file* argument. If the file is closed and its file
142descriptor is reused by a new file, or if :func:`os.dup2` is used to replace
143the file descriptor, the traceback will be written into a different file. Call
144these functions again each time that the file is replaced.
145
146
147Example
148-------
149
Victor Stinner215ad662014-03-25 12:33:56 +0100150.. highlight:: sh
Victor Stinner024e37a2011-03-31 01:31:06 +0200151
Victor Stinner215ad662014-03-25 12:33:56 +0100152Example of a segmentation fault on Linux with and without enabling the fault
153handler::
154
155 $ python3 -c "import ctypes; ctypes.string_at(0)"
156 Segmentation fault
157
158 $ python3 -q -X faulthandler
Victor Stinner024e37a2011-03-31 01:31:06 +0200159 >>> import ctypes
160 >>> ctypes.string_at(0)
161 Fatal Python error: Segmentation fault
162
Guido van Rossum2063aaf2013-10-20 19:15:19 -0700163 Current thread 0x00007fb899f39700 (most recent call first):
Victor Stinner024e37a2011-03-31 01:31:06 +0200164 File "/home/python/cpython/Lib/ctypes/__init__.py", line 486 in string_at
165 File "<stdin>", line 1 in <module>
166 Segmentation fault
167