首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >是否可以使用ipdb.set_trace()删除断点设置?

是否可以使用ipdb.set_trace()删除断点设置?
EN

Stack Overflow用户
提问于 2013-10-01 00:09:07
回答 3查看 9.9K关注 0票数 28

我在Python代码中的某处使用了ipdb.set_trace()。是否可以使用IPDB命令忽略此断点?

clear告诉我它清除了所有的断点,但是当它遇到ipdb.set_trace()这条线时,IPDB再次停止。

disable 1告诉我:No breakpoint numbered 1 ignore 1说:Breakpoint index '1' is not valid

澄清一下:当然,我可以简单地从我的源代码中删除断点。但这需要退出调试器并重新启动它。通常情况下,它需要做很多工作才能达到某个程度,而重新启动调试器会让事情变得更加困难。此外,如果有一个很大的循环,并且您想要检查循环中的对象,最简单的方法是在循环中直接在对象之后放置一个断点。那么,我如何使用next跳过循环(以及所有成千上万的set_trace()调用),并在循环之后逐步执行代码

EN

回答 3

Stack Overflow用户

发布于 2013-10-01 02:52:26

你可以利用Python中的任何东西都是对象这一事实。在调试器中,您可以执行以下操作:

代码语言:javascript
复制
def f(): pass
ipdb.set_trace = f

set_trace仍然会被调用,但它不会做任何事情。当然,这在某种程度上是永久性的,但您可以这样做

代码语言:javascript
复制
reload ipdb

你就可以恢复原来的行为了。

(您为什么要这样做?当您不小心将断点放在经常调用的函数中时,该函数通常在try/except下调用。一旦你意识到你在这个函数中停止了1000次,你尝试ctrl-c,但是它被try/except捕获了,你又回到了ipdb。因此,如果您使用的是低级代码,请确保您的set_traces具有一些上下文:

代码语言:javascript
复制
if myvar in ['some', 'sentinel', 'values']:
    ipdb.set_trace()

等。

票数 47
EN

Stack Overflow用户

发布于 2017-02-01 04:09:39

在向Corley学习之后

代码语言:javascript
复制
ipdb.set_trace = lambda: None

这对我很有效。

票数 23
EN

Stack Overflow用户

发布于 2013-10-01 02:02:20

运行该程序还应该在命中idb.set_trace()时准确地告诉您设置了它的位置(否则,尝试使用wherebt命令)。然后,您可以从文件中删除该行,然后重新启动程序。

否则,如果您觉得自己更具实验性,您可能会发现this很有用。

票数 -3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19098850

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档