Python中如何使用pdb.set_trace()进行调试?
代码很简单:
import pdb
def sum_nums(n):
s = 0
for i in range(n):
pdb.set_trace()
s += i
print(s)
if name == ‘main’:
sum_nums(5)
执行代码:
> /root/1.py(7)sum_nums()
-> s += i
(Pdb) c
0
> /root/1.py(6)sum_nums()
-> pdb.set_trace()
(Pdb) c
1
> /root/1.py(7)sum_nums()
-> s += i
(Pdb) c
3
> /root/1.py(6)sum_nums()
-> pdb.set_trace()
(Pdb) c
6
> /root/1.py(7)sum_nums()
-> s += i
(Pdb) c
10
如果把代码改为:
for i in range(n):
s += i
print(s)
pdb.set_trace()
那么执行后的每一条待执行都是-> for i in range(n):
疑问:
所有待执行的语句不应该都是 -> s += i 吗?为什么还穿插着 -> pdb.set_trace() ?
Python中如何使用pdb.set_trace()进行调试?
在Python里用pdb.set_trace()调试很简单,直接在代码里你想停下来的地方加上这行就行。运行到这儿的时候,程序就会暂停,让你用命令行来检查变量、单步执行什么的。
下面是个例子:
import pdb
def buggy_function(x, y):
result = x + y
pdb.set_trace() # 程序会在这里暂停
# 假设我们想看看 result 的值,或者继续执行
result *= 2
return result
if __name__ == "__main__":
output = buggy_function(5, 3)
print(f"结果是: {output}")
运行这个脚本,到了pdb.set_trace()那行就会进入pdb调试环境。这时候你可以用一些命令来控制:
n(next): 执行下一行。s(step): 进入函数内部。c(continue): 继续运行直到下一个断点或程序结束。p <变量名>: 打印变量的值,比如p result。l(list): 显示当前行附近的代码。q(quit): 退出调试器。
比如暂停后,你打个p result就能看到result当时是8,然后按c让程序跑完。
总结:在需要的地方插入pdb.set_trace()就能启动交互式调试。
你贴的代码没有缩进, 看不懂你的意思
代码:
import pdb
def sum_nums(n):
s = 0
for i in range(n):
pdb.set_trace()
s += i
print(s)
if name == ‘main’:
sum_nums(5)
重新输入上面的代码,空格自动被清除了

