如何忽略下一个类似pdb的断点,包括set_trace()调用?

时间:2016-03-16 14:16:50

标签: python pdb

我遇到以下问题:

我的代码非常类似于以下

def my_function():
    import pdb; pdb.set_trace()
    ....

在运行时,我的函数被调用了很多次。我对第一次调用此函数时检查代码执行感兴趣。

如果我已完成检查,我想点击c,并且正常执行程序恢复,而不会在下次调用此函数时停在此断点处。

有办法做到这一点吗?或者我必须做一些完全不同的事情,例如将set_trace()调用一些只调用一次的地方,然后一旦命中断点,使用tbreak my_function之类的命令设置一个那里的时间突破点?

2 个答案:

答案 0 :(得分:2)

您可以在第一次执行时尝试设置该功能的属性。类似的东西:

onRender: function () {
                var year = $('.datepicker').pickadate('picker').get('highlight', 'yyyy');
                var day = $('.datepicker').pickadate('picker').get('highlight', 'dd');
                var month = $('.datepicker').pickadate('picker').get('highlight', 'mm');
                console.log(year, day, month);

                $('.picker__header').prepend('<div class="picker__date-display"><div class="picker__weekday-display">[current day label]</div><div class="picker__month-display"><div>[current month]</div></div><div class="picker__day-display"><div>'+day+'</div></div><div    class="picker__year-display"><div>'+year+'</div></div></div>');
            }

属性def my_function(): if not hasattr(my_function,'first_time'): my_function.first_time = 1 # Dummy value import pdb; pdb.set_trace() ... 将在函数调用之间持续存在,并且在第一次调用函数时,它将被创建。每次调用该函数时,它都将存在,并且不会执行if语句中的代码。这个解决方案依赖于你的函数不是类中的方法,因为类方法不能具有属性,因为它们已经是类的属性。

就像说明一样,我不确定你是否在实际代码中有导入,但最好的编码实践表明你应该只在代码的开头放入导入,而不是在你拥有的函数内部。

答案 1 :(得分:1)

遇到此问题时,我import pdb; pdb.set_trace()在文件的开头(导入时间)或在__main__(运行时),然后使用调试器list(或仅使用{{ 1}})命令来查找您的行号,并使用l(或仅break)来设置断点。

您也可以从头开始以PDB模式启动程序,然后到达同一点。

b

例如,我将在第5行设置一个断点

(Pdb) help break
b(reak) ([file:]lineno | function) [, condition]
With a line number argument, set a break there in the current
file.  With a function name, set a break at first executable line
of that function.  Without argument, list all breaks.  If a second
argument is present, it is a string specifying an expression
which must evaluate to true before the breakpoint is honored.

The line number may be prefixed with a filename and a colon,
to specify a breakpoint in another file (probably one that
hasn't been loaded yet).  The file is searched for on sys.path;
the .py suffix may be omitted.

现在,继续

(Pdb) b 5
Breakpoint 1 at /home/flipmcf/program.py:5

到达断点后,您将输入Pdb。

由于您只想查看第一次运行,因此只需删除断点

(Pdb) c