“Python/docs/3.9/library/faulthandler”的版本间差异

来自菜鸟教程
Python/docs/3.9/library/faulthandler
跳转至:导航、​搜索
(autoload)
 
(Page commit)
 
第1行: 第1行:
 +
{{DISPLAYTITLE:faulthandler — 转储 Python 回溯 — Python 文档}}
 
<div id="module-faulthandler" class="section">
 
<div id="module-faulthandler" class="section">
  
 
<span id="faulthandler-dump-the-python-traceback"></span>
 
<span id="faulthandler-dump-the-python-traceback"></span>
= [[#module-faulthandler|<code>faulthandler</code>]] --- Dump the Python traceback =
+
= faulthandler — 转储 Python 回溯 =
  
 
<div class="versionadded">
 
<div class="versionadded">
  
<span class="versionmodified added">3.3 新版功能.</span>
+
<span class="versionmodified added">3.3 版中的新功能。</span>
  
  
 
</div>
 
</div>
This module contains functions to dump Python tracebacks explicitly, on a fault,
 
after a timeout, or on a user signal. Call [[#faulthandler.enable|<code>faulthandler.enable()</code>]] to
 
install fault handlers for the <code>SIGSEGV</code>, <code>SIGFPE</code>,
 
<code>SIGABRT</code>, <code>SIGBUS</code>, and <code>SIGILL</code> signals. You can also
 
enable them at startup by setting the <span id="index-0" class="target"></span>[[../../using/cmdline#envvar-PYTHONFAULTHANDLER|<code>PYTHONFAULTHANDLER</code>]] environment
 
variable or by using the [[../../using/cmdline#cmdoption-X|<code>-X</code>]] <code>faulthandler</code> 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 <code>sigaltstack()</code> 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
+
该模块包含显式转储 Python 回溯、故障、超时或用户信号的函数。 调用 [[#faulthandler.enable|faulthandler.enable()]] 为 <code>SIGSEGV</code>、<code>SIGFPE</code>、<code>SIGABRT</code>、<code>SIGBUS</code> 和 <code>SIGILL</code> 信号。 您还可以通过设置 <span id="index-0" class="target"></span>[[../../using/cmdline#envvar-PYTHONFAULTHANDLER|PYTHONFAULTHANDLER]] 环境变量或使用 [[../../using/cmdline#cmdoption-X|-X]] <code>faulthandler</code> 命令行选项在启动时启用它们。
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 <code>backslashreplace</code> error handler is used on encoding.
+
故障处理程序与系统故障处理程序(如 Apport 或 Windows 故障处理程序)兼容。 如果 <code>sigaltstack()</code> 函数可用,该模块使用信号处理程序的替代堆栈。 这允许它即使在堆栈溢出时也可以转储回溯。
* 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 [[../sys#sys|<code>sys.stderr</code>]]. To see
+
故障处理程序在灾难性情况下被调用,因此只能使用信号安全功能(例如 它不能在堆上分配内存)。 由于这个限制,与普通的 Python 回溯相比,回溯转储是最小的:
tracebacks, applications must be run in the terminal. A log file can
 
alternatively be passed to [[#faulthandler.enable|<code>faulthandler.enable()</code>]].
 
  
The module is implemented in C, so tracebacks can be dumped on a crash or when
+
* 仅支持 ASCII。 <code>backslashreplace</code> 错误处理程序用于编码。
Python is deadlocked.
+
* 每个字符串限制为 500 个字符。
 +
* 只显示文件名、函数名和行号。 (没有源代码)
 +
* 它被限制为 100 帧和 100 个线程。
 +
* 顺序相反:最先显示最近的呼叫。
  
The [[../devmode#devmode|<span class="std std-ref">Python Development Mode</span>]] calls [[#faulthandler.enable|<code>faulthandler.enable()</code>]]
+
默认情况下,Python 回溯被写入 [[../sys#sys|sys.stderr]]。 要查看回溯,应用程序必须在终端中运行。 日志文件也可以传递给 [[#faulthandler.enable|faulthandler.enable()]]。
at Python startup.
+
 
 +
该模块是用 C 实现的,因此可以在崩溃或 Python 死锁时转储回溯。
 +
 
 +
[[../devmode#devmode|Python 开发模式]] 在 Python 启动时调用 [[#faulthandler.enable|faulthandler.enable()]]
  
 
<div id="dumping-the-traceback" class="section">
 
<div id="dumping-the-traceback" class="section">
  
== Dumping the traceback ==
+
== 转储回溯 ==
  
 
<dl>
 
<dl>
<dt><code>faulthandler.</code><code>dump_traceback</code><span class="sig-paren">(</span>''<span class="n">file</span><span class="o">=</span><span class="default_value">sys.stderr</span>'', ''<span class="n">all_threads</span><span class="o">=</span><span class="default_value">True</span>''<span class="sig-paren">)</span></dt>
+
<dt><span class="sig-prename descclassname"><span class="pre">faulthandler.</span></span><span class="sig-name descname"><span class="pre">dump_traceback</span></span><span class="sig-paren">(</span>''<span class="n"><span class="pre">file</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">sys.stderr</span></span>'', ''<span class="n"><span class="pre">all_threads</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span>''<span class="sig-paren">)</span></dt>
<dd><p>Dump the tracebacks of all threads into ''file''. If ''all_threads'' is
+
<dd><p>将所有线程的回溯转储到 ''文件'' 中。 如果 ''all_threads'' <code>False</code>,则只转储当前线程。</p>
<code>False</code>, dump only the current thread.</p>
 
 
<div class="versionchanged">
 
<div class="versionchanged">
  
<p><span class="versionmodified changed">在 3.5 版更改: </span>Added support for passing file descriptor to this function.</p>
+
<p><span class="versionmodified changed"> 在 3.5 版更改: </span> 添加了对将文件描述符传递给此函数的支持。</p>
  
 
</div></dd></dl>
 
</div></dd></dl>
第61行: 第49行:
 
<div id="fault-handler-state" class="section">
 
<div id="fault-handler-state" class="section">
  
== Fault handler state ==
+
== 故障处理程序状态 ==
  
 
<dl>
 
<dl>
<dt><code>faulthandler.</code><code>enable</code><span class="sig-paren">(</span>''<span class="n">file</span><span class="o">=</span><span class="default_value">sys.stderr</span>'', ''<span class="n">all_threads</span><span class="o">=</span><span class="default_value">True</span>''<span class="sig-paren">)</span></dt>
+
<dt><span class="sig-prename descclassname"><span class="pre">faulthandler.</span></span><span class="sig-name descname"><span class="pre">enable</span></span><span class="sig-paren">(</span>''<span class="n"><span class="pre">file</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">sys.stderr</span></span>'', ''<span class="n"><span class="pre">all_threads</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span>''<span class="sig-paren">)</span></dt>
<dd><p>Enable the fault handler: install handlers for the <code>SIGSEGV</code>,
+
<dd><p>启用故障处理程序:为 <code>SIGSEGV</code><code>SIGFPE</code><code>SIGABRT</code><code>SIGBUS</code> <code>SIGILL</code> 信号安装处理程序以转储 Python 回溯。 如果 ''all_threads'' <code>True</code>,则为每个正在运行的线程生成回溯。 否则,仅转储当前线程。</p>
<code>SIGFPE</code>, <code>SIGABRT</code>, <code>SIGBUS</code> and <code>SIGILL</code>
+
<p>''文件'' 必须保持打开状态,直到故障处理程序被禁用:参见 [[#faulthandler-fd|文件描述符问题]] </p>
signals to dump the Python traceback. If ''all_threads'' is <code>True</code>,
 
produce tracebacks for every running thread. Otherwise, dump only the current
 
thread.</p>
 
<p>The ''file'' must be kept open until the fault handler is disabled: see
 
[[#faulthandler-fd|<span class="std std-ref">issue with file descriptors</span>]].</p>
 
 
<div class="versionchanged">
 
<div class="versionchanged">
  
<p><span class="versionmodified changed">在 3.5 版更改: </span>Added support for passing file descriptor to this function.</p>
+
<p><span class="versionmodified changed"> 在 3.5 版更改: </span> 添加了对将文件描述符传递给此函数的支持。</p>
  
 
</div>
 
</div>
 
<div class="versionchanged">
 
<div class="versionchanged">
  
<p><span class="versionmodified changed">3.6 版更改: </span>On Windows, a handler for Windows exception is also installed.</p>
+
<p><span class="versionmodified changed"> 3.6 版更改: </span> Windows 上,还安装了 Windows 异常处理程序。</p>
  
 
</div></dd></dl>
 
</div></dd></dl>
  
; <code>faulthandler.</code><code>disable</code><span class="sig-paren">(</span><span class="sig-paren">)</span>
+
; <span class="sig-prename descclassname"><span class="pre">faulthandler.</span></span><span class="sig-name descname"><span class="pre">disable</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span>
: Disable the fault handler: uninstall the signal handlers installed by [[#faulthandler.enable|<code>enable()</code>]].
+
: 禁用故障处理程序:卸载由 [[#faulthandler.enable|enable()]] 安装的信号处理程序。
  
; <code>faulthandler.</code><code>is_enabled</code><span class="sig-paren">(</span><span class="sig-paren">)</span>
+
; <span class="sig-prename descclassname"><span class="pre">faulthandler.</span></span><span class="sig-name descname"><span class="pre">is_enabled</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span>
: Check if the fault handler is enabled.
+
: 检查是否启用了故障处理程序。
  
  
第93行: 第76行:
 
<div id="dumping-the-tracebacks-after-a-timeout" class="section">
 
<div id="dumping-the-tracebacks-after-a-timeout" class="section">
  
== Dumping the tracebacks after a timeout ==
+
== 超时后转储回溯 ==
  
 
<dl>
 
<dl>
<dt><code>faulthandler.</code><code>dump_traceback_later</code><span class="sig-paren">(</span>''<span class="n">timeout</span>'', ''<span class="n">repeat</span><span class="o">=</span><span class="default_value">False</span>'', ''<span class="n">file</span><span class="o">=</span><span class="default_value">sys.stderr</span>'', ''<span class="n">exit</span><span class="o">=</span><span class="default_value">False</span>''<span class="sig-paren">)</span></dt>
+
<dt><span class="sig-prename descclassname"><span class="pre">faulthandler.</span></span><span class="sig-name descname"><span class="pre">dump_traceback_later</span></span><span class="sig-paren">(</span>''<span class="n"><span class="pre">timeout</span></span>'', ''<span class="n"><span class="pre">repeat</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span>'', ''<span class="n"><span class="pre">file</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">sys.stderr</span></span>'', ''<span class="n"><span class="pre">exit</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span>''<span class="sig-paren">)</span></dt>
<dd><p>Dump the tracebacks of all threads, after a timeout of ''timeout'' seconds, or
+
<dd><p>如果 ''repeat'' 是 <code>True</code>,则在 ''timeout'' 秒超时后或每隔 ''timeout'' 秒转储所有线程的回溯。 如果 ''exit'' <code>True</code>,则在转储回溯后以 status=1 调用 <code>_exit()</code>。 (注意 <code>_exit()</code> 会立即退出进程,这意味着它不会像刷新文件缓冲区那样进行任何清理。)如果该函数被调用两次,新调用将替换之前的参数并重置超时。 计时器具有亚秒级分辨率。</p>
every ''timeout'' seconds if ''repeat'' is <code>True</code>. If ''exit'' is <code>True</code>, call
+
<p>''文件'' 必须保持打开状态,直到回溯被转储或 [[#faulthandler.cancel_dump_traceback_later|cancel_dump_traceback_later()]] 被调用:参见 [[#faulthandler-fd|文件描述符问题]] </p>
<code>_exit()</code> with status=1 after dumping the tracebacks. (Note
+
<p>此功能是使用看门狗线程实现的。</p>
<code>_exit()</code> 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.</p>
 
<p>The ''file'' must be kept open until the traceback is dumped or
 
[[#faulthandler.cancel_dump_traceback_later|<code>cancel_dump_traceback_later()</code>]] is called: see [[#faulthandler-fd|<span class="std std-ref">issue with file
 
descriptors</span>]].</p>
 
<p>This function is implemented using a watchdog thread.</p>
 
 
<div class="versionchanged">
 
<div class="versionchanged">
  
<p><span class="versionmodified changed">3.7 版更改: </span>This function is now always available.</p>
+
<p><span class="versionmodified changed"> 3.7 版本变更: </span>此功能现在一直可用。</p>
  
 
</div>
 
</div>
 
<div class="versionchanged">
 
<div class="versionchanged">
  
<p><span class="versionmodified changed">在 3.5 版更改: </span>Added support for passing file descriptor to this function.</p>
+
<p><span class="versionmodified changed"> 在 3.5 版更改: </span> 添加了对将文件描述符传递给此函数的支持。</p>
  
 
</div></dd></dl>
 
</div></dd></dl>
  
; <code>faulthandler.</code><code>cancel_dump_traceback_later</code><span class="sig-paren">(</span><span class="sig-paren">)</span>
+
; <span class="sig-prename descclassname"><span class="pre">faulthandler.</span></span><span class="sig-name descname"><span class="pre">cancel_dump_traceback_later</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span>
: Cancel the last call to [[#faulthandler.dump_traceback_later|<code>dump_traceback_later()</code>]].
+
: 取消对 [[#faulthandler.dump_traceback_later|dump_traceback_later()]] 的最后一次调用。
  
  
第126行: 第101行:
 
<div id="dumping-the-traceback-on-a-user-signal" class="section">
 
<div id="dumping-the-traceback-on-a-user-signal" class="section">
  
== Dumping the traceback on a user signal ==
+
== 将回溯转储到用户信号上 ==
  
 
<dl>
 
<dl>
<dt><code>faulthandler.</code><code>register</code><span class="sig-paren">(</span>''<span class="n">signum</span>'', ''<span class="n">file</span><span class="o">=</span><span class="default_value">sys.stderr</span>'', ''<span class="n">all_threads</span><span class="o">=</span><span class="default_value">True</span>'', ''<span class="n">chain</span><span class="o">=</span><span class="default_value">False</span>''<span class="sig-paren">)</span></dt>
+
<dt><span class="sig-prename descclassname"><span class="pre">faulthandler.</span></span><span class="sig-name descname"><span class="pre">register</span></span><span class="sig-paren">(</span>''<span class="n"><span class="pre">signum</span></span>'', ''<span class="n"><span class="pre">file</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">sys.stderr</span></span>'', ''<span class="n"><span class="pre">all_threads</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span>'', ''<span class="n"><span class="pre">chain</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span>''<span class="sig-paren">)</span></dt>
<dd><p>Register a user signal: install a handler for the ''signum'' signal to dump
+
<dd><p>注册用户信号:为 ''signum'' 信号安装一个处理程序以转储所有线程的回溯,如果 ''all_threads'' <code>False</code>,则转储当前线程的回溯到 '']文件''。 如果链是 <code>True</code>,则调用前一个处理程序。</p>
the traceback of all threads, or of the current thread if ''all_threads'' is
+
<p>''file'' 必须保持打开状态,直到信号被 [[#faulthandler.unregister|unregister()]] 取消注册:参见 [[#faulthandler-fd|文件描述符问题]] </p>
<code>False</code>, into ''file''. Call the previous handler if chain is <code>True</code>.</p>
+
<p>Windows 上不可用。</p>
<p>The ''file'' must be kept open until the signal is unregistered by
 
[[#faulthandler.unregister|<code>unregister()</code>]]: see [[#faulthandler-fd|<span class="std std-ref">issue with file descriptors</span>]].</p>
 
<p>Not available on Windows.</p>
 
 
<div class="versionchanged">
 
<div class="versionchanged">
  
<p><span class="versionmodified changed">在 3.5 版更改: </span>Added support for passing file descriptor to this function.</p>
+
<p><span class="versionmodified changed"> 在 3.5 版更改: </span> 添加了对将文件描述符传递给此函数的支持。</p>
  
 
</div></dd></dl>
 
</div></dd></dl>
  
 
<dl>
 
<dl>
<dt><code>faulthandler.</code><code>unregister</code><span class="sig-paren">(</span>''<span class="n">signum</span>''<span class="sig-paren">)</span></dt>
+
<dt><span class="sig-prename descclassname"><span class="pre">faulthandler.</span></span><span class="sig-name descname"><span class="pre">unregister</span></span><span class="sig-paren">(</span>''<span class="n"><span class="pre">signum</span></span>''<span class="sig-paren">)</span></dt>
<dd><p>Unregister a user signal: uninstall the handler of the ''signum'' signal
+
<dd><p>注销用户信号:卸载[[#faulthandler.register|register()]]安装的''signum''信号处理程序。 如果信号已注册,则返回 <code>True</code>,否则返回 <code>False</code></p>
installed by [[#faulthandler.register|<code>register()</code>]]. Return <code>True</code> if the signal was registered,
+
<p>Windows 上不可用。</p></dd></dl>
<code>False</code> otherwise.</p>
 
<p>Not available on Windows.</p></dd></dl>
 
  
  
第154行: 第124行:
  
 
<span id="faulthandler-fd"></span>
 
<span id="faulthandler-fd"></span>
== Issue with file descriptors ==
+
== 文件描述符问题 ==
  
[[#faulthandler.enable|<code>enable()</code>]], [[#faulthandler.dump_traceback_later|<code>dump_traceback_later()</code>]] and [[#faulthandler.register|<code>register()</code>]] keep the
+
[[#faulthandler.enable|enable()]][[#faulthandler.dump_traceback_later|dump_traceback_later()]] [[#faulthandler.register|register()]] 保留其 ''file'' 参数的文件描述符。 如果文件被关闭并且其文件描述符被新文件重用,或者如果使用 [[../os#os|os.dup2()]] 替换文件描述符,则回溯将写入不同的文件。 每次替换文件时再次调用这些函数。
file descriptor of their ''file'' argument. If the file is closed and its file
 
descriptor is reused by a new file, or if [[../os#os|<code>os.dup2()</code>]] 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.
 
  
  
第166行: 第132行:
 
<div id="example" class="section">
 
<div id="example" class="section">
  
== Example ==
+
== 示例 ==
  
Example of a segmentation fault on Linux with and without enabling the fault
+
启用和不启用故障处理程序的 Linux 上的分段故障示例:
handler:
 
  
 
<div class="highlight-shell-session notranslate">
 
<div class="highlight-shell-session notranslate">
第175行: 第140行:
 
<div class="highlight">
 
<div class="highlight">
  
<pre>$ python3 -c &quot;import ctypes; ctypes.string_at(0)&quot;
+
<pre class="session">$ python3 -c &quot;import ctypes; ctypes.string_at(0)&quot;
 
Segmentation fault
 
Segmentation fault
  
第193行: 第158行:
  
 
</div>
 
</div>
 +
 +
</div>
 +
<div class="clearer">
 +
 +
  
 
</div>
 
</div>
  
[[Category:Python 3.9 中文文档]]
+
[[Category:Python 3.9 文档]]

2021年10月31日 (日) 04:52的最新版本

faulthandler — 转储 Python 回溯

3.3 版中的新功能。



该模块包含显式转储 Python 回溯、故障、超时或用户信号的函数。 调用 faulthandler.enable()SIGSEGVSIGFPESIGABRTSIGBUSSIGILL 信号。 您还可以通过设置 PYTHONFAULTHANDLER 环境变量或使用 -X faulthandler 命令行选项在启动时启用它们。

故障处理程序与系统故障处理程序(如 Apport 或 Windows 故障处理程序)兼容。 如果 sigaltstack() 函数可用,该模块使用信号处理程序的替代堆栈。 这允许它即使在堆栈溢出时也可以转储回溯。

故障处理程序在灾难性情况下被调用,因此只能使用信号安全功能(例如 它不能在堆上分配内存)。 由于这个限制,与普通的 Python 回溯相比,回溯转储是最小的:

  • 仅支持 ASCII。 backslashreplace 错误处理程序用于编码。
  • 每个字符串限制为 500 个字符。
  • 只显示文件名、函数名和行号。 (没有源代码)
  • 它被限制为 100 帧和 100 个线程。
  • 顺序相反:最先显示最近的呼叫。

默认情况下,Python 回溯被写入 sys.stderr。 要查看回溯,应用程序必须在终端中运行。 日志文件也可以传递给 faulthandler.enable()

该模块是用 C 实现的,因此可以在崩溃或 Python 死锁时转储回溯。

Python 开发模式 在 Python 启动时调用 faulthandler.enable()

转储回溯

faulthandler.dump_traceback(file=sys.stderr, all_threads=True)

将所有线程的回溯转储到 文件 中。 如果 all_threadsFalse,则只转储当前线程。

在 3.5 版更改: 添加了对将文件描述符传递给此函数的支持。


故障处理程序状态

faulthandler.enable(file=sys.stderr, all_threads=True)

启用故障处理程序:为 SIGSEGVSIGFPESIGABRTSIGBUSSIGILL 信号安装处理程序以转储 Python 回溯。 如果 all_threadsTrue,则为每个正在运行的线程生成回溯。 否则,仅转储当前线程。

文件 必须保持打开状态,直到故障处理程序被禁用:参见 文件描述符问题

在 3.5 版更改: 添加了对将文件描述符传递给此函数的支持。

3.6 版更改: 在 Windows 上,还安装了 Windows 异常处理程序。

faulthandler.disable()
禁用故障处理程序:卸载由 enable() 安装的信号处理程序。
faulthandler.is_enabled()
检查是否启用了故障处理程序。


超时后转储回溯

faulthandler.dump_traceback_later(timeout, repeat=False, file=sys.stderr, exit=False)

如果 repeatTrue,则在 timeout 秒超时后或每隔 timeout 秒转储所有线程的回溯。 如果 exitTrue,则在转储回溯后以 status=1 调用 _exit()。 (注意 _exit() 会立即退出进程,这意味着它不会像刷新文件缓冲区那样进行任何清理。)如果该函数被调用两次,新调用将替换之前的参数并重置超时。 计时器具有亚秒级分辨率。

文件 必须保持打开状态,直到回溯被转储或 cancel_dump_traceback_later() 被调用:参见 文件描述符问题

此功能是使用看门狗线程实现的。

3.7 版本变更: 此功能现在一直可用。

在 3.5 版更改: 添加了对将文件描述符传递给此函数的支持。

faulthandler.cancel_dump_traceback_later()
取消对 dump_traceback_later() 的最后一次调用。


将回溯转储到用户信号上

faulthandler.register(signum, file=sys.stderr, all_threads=True, chain=False)

注册用户信号:为 signum 信号安装一个处理程序以转储所有线程的回溯,如果 all_threadsFalse,则转储当前线程的回溯到 ]文件。 如果链是 True,则调用前一个处理程序。

file 必须保持打开状态,直到信号被 unregister() 取消注册:参见 文件描述符问题

在 Windows 上不可用。

在 3.5 版更改: 添加了对将文件描述符传递给此函数的支持。

faulthandler.unregister(signum)

注销用户信号:卸载register()安装的signum信号处理程序。 如果信号已注册,则返回 True,否则返回 False

在 Windows 上不可用。


文件描述符问题

enable()dump_traceback_later()register() 保留其 file 参数的文件描述符。 如果文件被关闭并且其文件描述符被新文件重用,或者如果使用 os.dup2() 替换文件描述符,则回溯将写入不同的文件。 每次替换文件时再次调用这些函数。


示例

启用和不启用故障处理程序的 Linux 上的分段故障示例:

$ 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