faulthandler
— 转储 Python 回溯信息#
当发生故障、超时或收到用户信号时 faulthandler
可转储 Python 回溯信息的函数。调用 faulthandler.enable()
可安装针对 signal.SIGSEGV
, signal.SIGFPE
, signal.SIGABRT
, signal.SIGBUS
和 signal.SIGILL
信号的故障处理器。你还可以在启动时通过设置 PYTHONFAULTHANDLER
环境变量或使用 -X
faulthandler
命令行选项来启用它们。
%%bash
python -c "import ctypes; ctypes.string_at(0)"
bash: line 1: 17665 Segmentation fault (core dumped) python -c "import ctypes; ctypes.string_at(0)"
---------------------------------------------------------------------------
CalledProcessError Traceback (most recent call last)
Cell In[1], line 1
----> 1 get_ipython().run_cell_magic('bash', '', 'python -c "import ctypes; ctypes.string_at(0)"\n')
File /opt/hostedtoolcache/Python/3.12.8/x64/lib/python3.12/site-packages/IPython/core/interactiveshell.py:2541, in InteractiveShell.run_cell_magic(self, magic_name, line, cell)
2539 with self.builtin_trap:
2540 args = (magic_arg_s, cell)
-> 2541 result = fn(*args, **kwargs)
2543 # The code below prevents the output from being displayed
2544 # when using magics with decorator @output_can_be_silenced
2545 # when the last Python token in the expression is a ';'.
2546 if getattr(fn, magic.MAGIC_OUTPUT_CAN_BE_SILENCED, False):
File /opt/hostedtoolcache/Python/3.12.8/x64/lib/python3.12/site-packages/IPython/core/magics/script.py:155, in ScriptMagics._make_script_magic.<locals>.named_script_magic(line, cell)
153 else:
154 line = script
--> 155 return self.shebang(line, cell)
File /opt/hostedtoolcache/Python/3.12.8/x64/lib/python3.12/site-packages/IPython/core/magics/script.py:315, in ScriptMagics.shebang(self, line, cell)
310 if args.raise_error and p.returncode != 0:
311 # If we get here and p.returncode is still None, we must have
312 # killed it but not yet seen its return code. We don't wait for it,
313 # in case it's stuck in uninterruptible sleep. -9 = SIGKILL
314 rc = p.returncode or -9
--> 315 raise CalledProcessError(rc, cell)
CalledProcessError: Command 'b'python -c "import ctypes; ctypes.string_at(0)"\n'' returned non-zero exit status 139.
%%bash
python -X faulthandler -c "import ctypes; ctypes.string_at(0)"
Fatal Python error: Segmentation fault
Current thread 0x00007f0984718b80 (most recent call first):
File "/opt/hostedtoolcache/Python/3.12.8/x64/lib/python3.12/ctypes/__init__.py", line 525 in string_at
File "<string>", line 1 in <module>
Extension modules: markupsafe._speedups (total: 1)
bash: line 1: 17679 Segmentation fault (core dumped) python -X faulthandler -c "import ctypes; ctypes.string_at(0)"
---------------------------------------------------------------------------
CalledProcessError Traceback (most recent call last)
Cell In[2], line 1
----> 1 get_ipython().run_cell_magic('bash', '', 'python -X faulthandler -c "import ctypes; ctypes.string_at(0)"\n')
File /opt/hostedtoolcache/Python/3.12.8/x64/lib/python3.12/site-packages/IPython/core/interactiveshell.py:2541, in InteractiveShell.run_cell_magic(self, magic_name, line, cell)
2539 with self.builtin_trap:
2540 args = (magic_arg_s, cell)
-> 2541 result = fn(*args, **kwargs)
2543 # The code below prevents the output from being displayed
2544 # when using magics with decorator @output_can_be_silenced
2545 # when the last Python token in the expression is a ';'.
2546 if getattr(fn, magic.MAGIC_OUTPUT_CAN_BE_SILENCED, False):
File /opt/hostedtoolcache/Python/3.12.8/x64/lib/python3.12/site-packages/IPython/core/magics/script.py:155, in ScriptMagics._make_script_magic.<locals>.named_script_magic(line, cell)
153 else:
154 line = script
--> 155 return self.shebang(line, cell)
File /opt/hostedtoolcache/Python/3.12.8/x64/lib/python3.12/site-packages/IPython/core/magics/script.py:315, in ScriptMagics.shebang(self, line, cell)
310 if args.raise_error and p.returncode != 0:
311 # If we get here and p.returncode is still None, we must have
312 # killed it but not yet seen its return code. We don't wait for it,
313 # in case it's stuck in uninterruptible sleep. -9 = SIGKILL
314 rc = p.returncode or -9
--> 315 raise CalledProcessError(rc, cell)
CalledProcessError: Command 'b'python -X faulthandler -c "import ctypes; ctypes.string_at(0)"\n'' returned non-zero exit status 139.