146

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

4

6 回答 6

243

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!
于 2013-07-23T20:55:23.947 回答
40

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

于 2016-12-29T02:15:42.140 回答
12

@voithos的答案set_trace是正确的,所以在您使用. 是的,pdb.set_trace = lambda: None黑客可以正常工作,但如果您设置了其他断点并希望稍后重新启用它,则不会。对我来说,这表明不幸pdb的是缺少一堆功能(甚至是显示列表等基本功能),这是另一种情况。

好消息是,这pdb++是一个很好的替代品pdb,它解决的问题之一就是禁用set_trace. 所以你可以简单地做:

pip install pdbpp

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

pdb.disable()

如果您想稍后重新启用,不出所料,这很有效:

pdb.enable()

简单的!除此之外,您还将获得许多其他有用的好东西。

于 2018-03-15T20:56:55.623 回答
4

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

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

  1. 记下断点编号(或文件和行号),
  2. 要么永久删除断点,要么cl bp_number 其关闭但能够将其切换回来。clear file:line disable pb_number
  3. 然后continue你的程序运行直到下一个不同的断点被命中。

有关上述内容的更多详细信息,请参阅手册

于 2013-07-23T20:55:37.963 回答
0

找到不安装任何东西退出 pdb 的新方法: - 当程序开始运行时,按 ctrl+c,然后将窗口切换到另一个(任何窗口),然后运行 ​​pdb 的原始 shell 应该显示如下内容:(pdb) ..... - 切换回 pdb,然后按 Enter,现在一切就绪,pdb 命令 shell 再次出现

于 2020-03-28T12:36:48.523 回答
0

禁用断点。从 pdb 中,只需键入 disable N,其中 N 是您卡住的断点编号。如果您不知道麻烦断点的编号,请输入 tbreak。这将在“Num”列下按编号列出您的断点,并在标题为“Enb”的列下显示(是)或否(否)它们是启用还是禁用。
一旦你解除了麻烦的断点,运行命令 continue(或缩写 c)应该会完成你的程序。

于 2022-02-28T15:30:41.597 回答