如何退出pdb并允许程序继续?

时间:2013-07-23 20:40:45

标签: python

我正在使用pdb模块来调试程序。我想了解如何退出pdb并允许程序继续完成。该程序运行起来计算成本很高,因此我不希望在没有脚本尝试完成的情况下退出。 continue似乎不起作用。如何退出pdb并继续我的程序?

5 个答案:

答案 0 :(得分:142)

continue应该“继续执行,只在遇到断点时停止”,这样你就可以在某处设置断点。要删除断点(如果您手动插入断点):

(Pdb) break
Num Type         Disp Enb   Where
1   breakpoint   keep yes   at /path/to/test.py:5
(Pdb) clear 1
Deleted breakpoint 1
(Pdb) continue

或者,如果你正在使用pdb.set_trace(),你可以试试这个(虽然如果你以更奇特的方式使用pdb,这可能会破坏事情......)

(Pdb) pdb.set_trace = lambda: None  # This replaces the set_trace() function!
(Pdb) continue
# No more breaks!

答案 1 :(得分:15)

一个简单的 Ctrl - D 将突破pdb。如果你想继续而不是破坏,只需按 c 而不是整个continue命令

答案 2 :(得分:4)

如果你真的想退出调试器,那么你需要运行类似WinPdb的东西,它允许你从进程中分离然后退出调试器,(N.B.它是多平台的)。

如果您想继续调试但不再停留在给定断点处,则需要:

  1. 记下断点号,(或文件和行号),
  2. cl bp_number clear file:line永久删除断点 disable pb_number以将其切换为关闭但能够切换它回来。
  3. 然后continue和你的程序一直运行到下一个 不同的 断点。
  4. 有关上述内容的详细信息,请参阅the manual

答案 3 :(得分:3)

来自@voithos的answer是正确的,因此我只是在您使用set_trace的情况下添加一个替代方案。是的,pdb.set_trace = lambda: None黑客工作正常,但如果您设置了其他断点并希望稍后重新启用它,则不行。对我来说,这表明不幸的是pdb缺少一堆功能(甚至是显示列表等基本内容),这是另一种情况。

好消息是pdb++pdb的绝佳替代品,它解决的问题之一就是禁用set_trace的问题。所以你可以这样做:

pip install pdbpp

然后在(Pdb++)提示符下键入:

pdb.disable()

如果您想稍后重新启用,毫不奇怪这可行:

pdb.enable()

轻松!而且你将获得许多其他有用的东西。

答案 4 :(得分:0)

找到无需安装任何内容即可退出pdb的新方法: -当程序开始运行时,按ctrl + c,然后将窗口切换到另一个(任何窗口),然后应显示运行pdb的原始shell 像:(pdb)..... -切换回pdb,然后按Enter,现在一切就绪,使用pdb命令 外壳再次出现