gpt4 book ai didi

python - 在Python中使用pdb以编程方式添加断点

转载 作者:行者123 更新时间:2023-12-01 09:22:46 33 4
gpt4 key购买 nike

我发现在大型多层软件中,通过将以下内容放入代码中通常更容易调试 python 代码。

导入pdb; pdb.set_trace() 这会在我放置语句的 LOC 处设置一个断点,我可以在代码中以交互方式使用 pdb 继续并检查代码执行等。

我想知道是否可以为此类 python 调试添加多个断点,以便我可以在交互式 python 调试器中执行 c 并命中下一个断点?

即例如

<python code>
import pdb; pdb.set_trace();
... interactive debugging....
...press c here....
<more python code>
...
....
<breakpoint>// How can we insert such a breakpoint?

最佳答案

我曾经为ipdb做过这个通过大量修改它here 。然而,我最近重新发明了轮子,以一种我认为更简单的方式可以与任何 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_running_trace 之前,您可以按文件/行号设置断点,但是您只能在调用 set_running_trace 后设置依赖于范围的断点,如函数名foo在这个例子中。

关于python - 在Python中使用pdb以编程方式添加断点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50691169/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com