在python中使用pdb以编程方式添加断点
我发现,在大型多层软件中,通过在代码中添加以下内容,调试python代码通常更容易在python中使用pdb以编程方式添加断点,python,pdb,Python,Pdb,我发现,在大型多层软件中,通过在代码中添加以下内容,调试python代码通常更容易 导入pdb;pdb.set_trace()这在我放置语句的LOC处设置了一个断点,我可以使用pdb以交互方式在代码中继续,并检查代码执行情况等 我想知道是否可以为此类python调试添加多个断点,以便我可以在交互式python调试器中执行c,并点击下一个断点 i、 比如说 <python code> import pdb; pdb.set_trace(); ... interactive debugg
导入pdb;pdb.set_trace()
这在我放置语句的LOC处设置了一个断点,我可以使用pdb以交互方式在代码中继续,并检查代码执行情况等
我想知道是否可以为此类python调试添加多个断点,以便我可以在交互式python调试器中执行c
,并点击下一个断点
i、 比如说
<python code>
import pdb; pdb.set_trace();
... interactive debugging....
...press c here....
<more python code>
...
....
<breakpoint>// How can we insert such a breakpoint?
进口pdb;pdb.set_trace();
... 交互式调试。。。。
…在这里按c。。。。
...
....
//我们如何插入这样的断点?
我曾经为ipdb
做过大量修改。然而,我最近重新发明了轮子,我认为使用任何Bdb调试器都更简单。在pdb
和ipdb
#!/usr/bin/env python3
import pdb
import sys
import ipdb.__main__
def foo(x):
return x+1
class RunningTrace():
def set_running_trace(self):
frame = sys._getframe().f_back
self.botframe = None
self.setup(frame, None)
while frame:
frame.f_trace = self.trace_dispatch
self.botframe = frame
frame = frame.f_back
self.set_continue()
self.quitting = False
sys.settrace(self.trace_dispatch)
class ProgrammaticPdb(pdb.Pdb, RunningTrace):
pass
class ProgrammaticIpdb(ipdb.__main__.debugger_cls, RunningTrace):
pass
p = ProgrammaticPdb()
# p = ProgrammaticIpdb(ipdb.__main__.def_colors)
p.onecmd('b bar.py:38') # Works before set_running_trace
p.set_running_trace()
p.onecmd('b foo') # only works after calling set_running_trace
p.onecmd('l')
x=-1
x=2
x=0
x=foo(x)
print(x)
在调用set\u running\u trace
之前,您可以按文件/行号设置断点,但是在调用set\u running\u trace
之后,您只能根据范围设置断点,例如本例中的函数名foo