我发现在大型多层软件中,通过将以下内容放入代码中通常更容易调试 python 代码。
import pdb; pdb.set_trace()
这在我放置语句的 LOC 处设置了一个断点,我可以在代码中以交互方式使用 pdb 继续并检查代码执行等。
我想知道是否可以为此类 python 调试添加多个断点,以便我可以c
在交互式 python 调试器中执行并命中下一个断点?
即例如
<python code>
import pdb; pdb.set_trace();
... interactive debugging....
...press c here....
<more python code>
...
....
<breakpoint>// How can we insert such a breakpoint?
Run Code Online (Sandbox Code Playgroud)
我曾经通过在这里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)
Run Code Online (Sandbox Code Playgroud)
您可以在调用之前按文件/行号设置断点set_running_trace
,但是在调用之后只能设置取决于范围的断点set_running_trace
,例如foo
本例中的函数名称。
归档时间: |
|
查看次数: |
1606 次 |
最近记录: |