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()进行调试?


5 回复

在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)

重新输入上面的代码,空格自动被清除了

回到顶部