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


111

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


2
continue退出循环,return退出方法/功能
Stephan

7
@Stephan:他说的continue是pdb命令。不是Python语句。
voithos

1
@turtle:continue根据文档,应该“继续执行,仅在遇到断点时停止”。您是否遇到了断点设置?
voithos

1
啊。好的我明白了。是的,我在循环内设置了一个断点。无论如何要解决这个问题?循环被调用了数千次,所以我无法继续手动点击继续。
乌龟

1
@turtle:您是在Pdb中设置了断点还是pdb.set_trace()在源代码中设置了断点?
voithos

Answers:


190

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!

10
上面没有退出 pdb。
史蒂夫·巴恩斯

7
关于问题的第15个字!
史蒂夫·巴恩斯

13
@SteveBarnes:我认为您从字面上看也是这样。OP一次又一次地达到断点。他们所需要的只是继续他们长期运行的过程而不会遇到断点。Pdb是否实际运行无关紧要。
voithos

35
关于设置的好提示set_trace = lambda: None:)
randlet

2
在极端的情况下,什么都没有set_trace = lambda: None。Python组织应该添加一个命令,该命令只允许您退出pdb。
ErezO

26

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


6
当您在函数内部,循环内部时该怎么办?看来对我来说只是进入下一个循环,而实际上我不能在不关闭整个终端的情况下关闭pdb甚至是python吗?
Marses

@LimokPalantaemon奇怪,你尝试过打字exit
阮明哲

如果您设置迹线或有断点,那么除非您继续按c,否则这将不起作用。
亚历克斯

令人尴尬,但这使我免于被困太久-_-
jmcg

7

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

好消息是这pdb++是一个很好的替代产品pdb,它解决的问题之一就是禁用问题set_trace。因此,您可以简单地执行以下操作:

pip install pdbpp

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

pdb.disable()

如果您以后想要重新启用,那么这很正常:

pdb.enable()

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


4

如果您确实希望退出调试器,则需要运行WinPdb之类的程序,该程序可让您脱离进程,然后退出调试器(注意,它是多平台的)。

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

  1. 记下断点号(或文件和行号),
  2. 无论是cl bp_number clear file:line永久删除断点 disable pb_number切换它关闭,但可以切换回来。
  3. 然后continue,您的程序将运行,直到遇到下一个不同的断点为止。

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


0

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.