暂时在IPython中进入调试器

时间:2013-05-23 11:14:26

标签: python debugging ipython pdb

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

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

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

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

2 个答案:

答案 0 :(得分:0)

I can hit Ctrl-C and be dropped to a Python debugger console at the exact
point I stopped the program.

Ctrl-C正在中断您的程序,这会引发KeyboardInterrupt,当您继续continue继续...并按照您发送的Ctrl-C的要求中断您的程序。 Ctrl-C不会在某个特定点以调试模式“暂停”程序。

您正在寻找的是设置一个特定行的断点,例如%run -d允许您这样做。请参阅%run?

答案 1 :(得分: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'>}