3

在 IPython 中,%pdb启用后,我可以按 Ctrl-C 并在我停止程序的确切位置被拖放到 Python 调试器控制台。

但是,此时程序完全停止,即使我continue在调试器中运行,我也无法恢复执行。

IPython 是否能够做到这一点,然后让我在完成后恢复程序的执行?

注意:我知道pdb.set_trace(),但这不是我要找的。如果可能的话,我正在寻找一种快速、暂时停止 IPython 以进行快速无害检查的方法,而不必手动添加set_trace我的代码。

4

2 回答 2

0
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?

于 2013-05-23T12:44:09.310 回答
0

这种事情有很多极端案例。然而,向你的 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'>}
于 2016-06-21T00:17:22.120 回答