在 IPython 中,%pdb
启用后,我可以按 Ctrl-C 并在我停止程序的确切位置被拖放到 Python 调试器控制台。
但是,此时程序完全停止,即使我continue
在调试器中运行,我也无法恢复执行。
IPython 是否能够做到这一点,然后让我在完成后恢复程序的执行?
注意:我知道pdb.set_trace()
,但这不是我要找的。如果可能的话,我正在寻找一种快速、暂时停止 IPython 以进行快速无害检查的方法,而不必手动添加set_trace
我的代码。
I can hit Ctrl-C and be dropped to a Python debugger console at the exact
point I stopped the program.
Ctrl-C 正在中断您的程序,这会引发 a KeyboardInterrupt
,当您continue
继续继续时...并按照您发送的 Ctrl-C 的要求中断您的程序。Ctrl-C 不是在某个时刻以调试模式“暂停”程序。
你正在寻找的是在一个特定的行设置一个断点,就像%run -d
允许你做的那样。见%run?
。
这种事情有很多极端案例。然而,向你的 usercustomize.py 添加一个信号处理程序会让你走得很远:
cat >> $(python -m site --user-site)/usercustomize.py <<EOF
import signal, pdb
signal.signal(signal.SIGINT, lambda *args: pdb.set_trace())
EOF
现在,当您启动 python 时,您将安装该信号处理程序。
例如,您现在可以中断 SimpleHTTPServer:
$ python -m SimpleHTTPServer
Serving HTTP on 0.0.0.0 port 8000 ...
^C--Return--
> [...].local/lib/python2.7/site-packages/usercustomize.py(3)<lambda>()>None
-> signal.signal(signal.SIGINT, lambda *args: pdb.set_trace())
(Pdb) locals()
{'__return__': None, 'args': (2, <frame object at 0x10245b238>), 'os': <module 'os' from '[...]/lib/python2.7/os.pyc'>}