首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用pdb的条件断点

使用pdb的条件断点
EN

Stack Overflow用户
提问于 2014-08-13 06:54:21
回答 3查看 19.8K关注 0票数 14

听起来我遗漏了一些非常简单的东西,我试图在我的python代码中设置一个断点,使用:

代码语言:javascript
复制
if(some condition):
        pdb.set_trace()

我在代码中的错误是在使用打印等进行调试的大量iterations..difficult之后出现的。当条件出现时,我可以打印东西,但我想设置brk-pt。

-编辑--

实际代码:

代码语言:javascript
复制
import pdb
if (node_num == 16):
    print node_num
    pdb.set_trace()
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-08-13 07:25:37

我不确定为什么你的代码不能工作,但是你能做的就是在你的本地机器上,为你的最小示例创建一个新文件,看看你是否可以做你想做的事情

代码语言:javascript
复制
import pdb

for node_num in range(50):
    if node_num == 16:
        print(node_num)
        pdb.set_trace()

现在运行它:

代码语言:javascript
复制
16
> /tmp/tmp.py(3)<module>()
-> for node_num in range(50):
(Pdb) p node_num
16

正如您在这个简单的示例中所看到的那样,您需要弄清楚如何使其适应您的代码,和/或找出您对代码/环境做了哪些其他操作,从而阻止了该提示的出现。

或者,如果您有一个在异常中死亡的函数,并且您想知道导致它的确切行,那么您应该改用post_mortem。用下面的代码包装有问题的代码段

代码语言:javascript
复制
try:
    problem_function()
except Exception:  # or the specific exception type thrown
    pdb.post_mortem()
    raise

post_mortem所做的就是在发生异常的地方(特别是在该堆栈帧中)转储一个断点,这样就可以检查所有的值,然后让您继续执行。然而,我也在最后放了一个提升,以允许异常照常继续,这是因为执行通常不会从它死的地方开始,而只是由于post_mortem调用而暂停在异常处理块上。在检查出什么地方出了问题之后,干脆放弃吧。

票数 2
EN

Stack Overflow用户

发布于 2017-06-03 03:49:28

我看你找到解决方案了桑杰。但是,对于那些来到这里寻找使用pdb设置条件断点的方法的人,请继续阅读:

在交互模式下运行pdb,而不是硬编码条件,如if node_num == 16:。示例代码:

代码语言:javascript
复制
import pdb

for node_num in range(50):
  do_something(node_num)
...

在shell中,使用-m pdb在调试模式下启动脚本

代码语言:javascript
复制
[rick@rolled ~]$ python -m pdb abc.py
> /home/dcadm/abc.py(1)<module>()
-> import pdb
(Pdb) l
  1  -> import pdb
  2
  3     for node_num in range(50) :
  4       foo = 2**node_num
[EOF]
(Pdb) b 4, node_num > 4
Breakpoint 1 at /home/dcadm/abc.py:4
(Pdb) c
> /home/dcadm/abc.py(4)<module>()
-> foo = 2**node_num
(Pdb) node_num 
5
(Pdb)

当node_num大于4时,pdb shell命令b 4, node_num > 4在第4行中断。

票数 40
EN

Stack Overflow用户

发布于 2019-03-14 18:13:19

要在pdb中实际使用条件断点,可以执行以下操作:

函数b(reak) [(文件名:lineno|

),条件]

https://docs.python.org/3/library/pdb.html#pdbcommand-break

例如,我正在运行一些迭代django视图的测试代码。我只想在达到我感兴趣的特定视图时中断:

b C:\Users\powlo\project\tests\TestCase.py:350,view.view_name == 'app.views.export'

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

https://stackoverflow.com/questions/25275410

复制
相关文章

相似问题

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