如何使用Python的pdb模块进行代码调试?

2026-05-16 15:351阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计935个文字,预计阅读时间需要4分钟。

如何使用Python的pdb模块进行代码调试?

当然,以下是简化后的内容,不超过100字:

借助PyCharm断点调试代码简单、方便、明了。但在实际项目中,经常遇到Linux上调试代码,没有PyCharm等工具支持的情况,让人头疼。

诚然,借助pycharm打断点调试代码确实很简单,很方便,也很明了,但是在实际项目开发中,经常会遇到比如在linux上调试一段代码,没有pycharm等工具支撑的时候,很多人可能会考虑在代码中打印信息来辅助定位,但是如果代码挺多,变量挺多的时候,定位起来就相当的麻烦,所以作为一个合格的python开发者,pdb调试的方法还是要掌握的

下面在linux系统以如下一段代码为例,详细演示如何利用pdb调试,首先需要导入pdb,然后在想调试的位置加上pdb.set_trace(),当程序执行的时候就会从此处进入调试位置,如下就从开始直接进行调试

如何使用Python的pdb模块进行代码调试?

1 在Linux系统创建demo.py文件,内容如下

import pdb

def get_sum(num):
sum=0

for i in range(num):
sum+=i
return sum


if __name__=="__main__":
pdb.set_trace()
num=5
sum=get_sum(num)
print(sum)

2 开始调试代码

(1)在命令行通过python demo.py执行,可以看到此处有个箭头执向赋值语句,表示即将执行此条语句,即箭头指向的位置尚未执行

[root@redrose2100 opt]# python3 demo.py
> /opt/demo.py(13)<module>()
-> num=5
(Pdb)

(2)输入小写字母 l 可以查看代码上下文 list:

(Pdb) l
8 return sum
9
10
11 if __name__=="__main__":
12 pdb.set_trace()
13 -> num=5
14 sum=get_sum(num)
15 print(sum)
[EOF]
(Pdb)

(3)通过 p xxx 可以打印xxx变量,查看xxx变量当前的值,如下确实验证了num尚未赋值

(Pdb) p num
*** NameError: name 'num' is not defined
(Pdb)

(4)输入 n 执行下一步(next)

(Pdb) n
> /opt/demo.py(14)<module>()
-> sum=get_sum(num)
(Pdb) p num
5
(Pdb)

(5)输入 s 进入到调用函数里面 step,注意,此时如果输入n,则不会进入函数调用,直接将函数调用这一行执行完成,使用s可以进入到函数里面继续看

(Pdb) s
--Call--
> /opt/demo.py(3)get_sum()
-> def get_sum(num):
(Pdb)

(6)此时可以不断的输入n或者p xxx 来调试查看变量

-> def get_sum(num):
(Pdb) n
> /opt/demo.py(4)get_sum()
-> sum=0
(Pdb) n
> /opt/demo.py(6)get_sum()
-> for i in range(num):
(Pdb) n
> /opt/demo.py(7)get_sum()
-> sum+=i
(Pdb) n
> /opt/demo.py(6)get_sum()
-> for i in range(num):
(Pdb) p sum
0
(Pdb) n
> /opt/demo.py(7)get_sum()
-> sum+=i
(Pdb) n
> /opt/demo.py(6)get_sum()
-> for i in range(num):
(Pdb) n
> /opt/demo.py(7)get_sum()
-> sum+=i
(Pdb) n
> /opt/demo.py(6)get_sum()
-> for i in range(num):
(Pdb) p sum
3
(Pdb) n
> /opt/demo.py(7)get_sum()
-> sum+=i
(Pdb) n
> /opt/demo.py(6)get_sum()
-> for i in range(num):
(Pdb) n
> /opt/demo.py(7)get_sum()
-> sum+=i
(Pdb) p sum
6
(Pdb) p i
4
(Pdb)

(7)假如现在感觉这个函数已经调试的差不多了,但是并没有执行完,可以输入
r 回到函数调用完成的位置

(Pdb) r
--Return--
> /opt/demo.py(8)get_sum()->10
-> return sum
(Pdb) p sum
10
(Pdb)

(8)假如这个时候感觉已经调试完成了,想结束了,可以直接输入 c,即可结束调试

(Pdb) c
10
[root@redrose2100 opt]#


本文共计935个文字,预计阅读时间需要4分钟。

如何使用Python的pdb模块进行代码调试?

当然,以下是简化后的内容,不超过100字:

借助PyCharm断点调试代码简单、方便、明了。但在实际项目中,经常遇到Linux上调试代码,没有PyCharm等工具支持的情况,让人头疼。

诚然,借助pycharm打断点调试代码确实很简单,很方便,也很明了,但是在实际项目开发中,经常会遇到比如在linux上调试一段代码,没有pycharm等工具支撑的时候,很多人可能会考虑在代码中打印信息来辅助定位,但是如果代码挺多,变量挺多的时候,定位起来就相当的麻烦,所以作为一个合格的python开发者,pdb调试的方法还是要掌握的

下面在linux系统以如下一段代码为例,详细演示如何利用pdb调试,首先需要导入pdb,然后在想调试的位置加上pdb.set_trace(),当程序执行的时候就会从此处进入调试位置,如下就从开始直接进行调试

如何使用Python的pdb模块进行代码调试?

1 在Linux系统创建demo.py文件,内容如下

import pdb

def get_sum(num):
sum=0

for i in range(num):
sum+=i
return sum


if __name__=="__main__":
pdb.set_trace()
num=5
sum=get_sum(num)
print(sum)

2 开始调试代码

(1)在命令行通过python demo.py执行,可以看到此处有个箭头执向赋值语句,表示即将执行此条语句,即箭头指向的位置尚未执行

[root@redrose2100 opt]# python3 demo.py
> /opt/demo.py(13)<module>()
-> num=5
(Pdb)

(2)输入小写字母 l 可以查看代码上下文 list:

(Pdb) l
8 return sum
9
10
11 if __name__=="__main__":
12 pdb.set_trace()
13 -> num=5
14 sum=get_sum(num)
15 print(sum)
[EOF]
(Pdb)

(3)通过 p xxx 可以打印xxx变量,查看xxx变量当前的值,如下确实验证了num尚未赋值

(Pdb) p num
*** NameError: name 'num' is not defined
(Pdb)

(4)输入 n 执行下一步(next)

(Pdb) n
> /opt/demo.py(14)<module>()
-> sum=get_sum(num)
(Pdb) p num
5
(Pdb)

(5)输入 s 进入到调用函数里面 step,注意,此时如果输入n,则不会进入函数调用,直接将函数调用这一行执行完成,使用s可以进入到函数里面继续看

(Pdb) s
--Call--
> /opt/demo.py(3)get_sum()
-> def get_sum(num):
(Pdb)

(6)此时可以不断的输入n或者p xxx 来调试查看变量

-> def get_sum(num):
(Pdb) n
> /opt/demo.py(4)get_sum()
-> sum=0
(Pdb) n
> /opt/demo.py(6)get_sum()
-> for i in range(num):
(Pdb) n
> /opt/demo.py(7)get_sum()
-> sum+=i
(Pdb) n
> /opt/demo.py(6)get_sum()
-> for i in range(num):
(Pdb) p sum
0
(Pdb) n
> /opt/demo.py(7)get_sum()
-> sum+=i
(Pdb) n
> /opt/demo.py(6)get_sum()
-> for i in range(num):
(Pdb) n
> /opt/demo.py(7)get_sum()
-> sum+=i
(Pdb) n
> /opt/demo.py(6)get_sum()
-> for i in range(num):
(Pdb) p sum
3
(Pdb) n
> /opt/demo.py(7)get_sum()
-> sum+=i
(Pdb) n
> /opt/demo.py(6)get_sum()
-> for i in range(num):
(Pdb) n
> /opt/demo.py(7)get_sum()
-> sum+=i
(Pdb) p sum
6
(Pdb) p i
4
(Pdb)

(7)假如现在感觉这个函数已经调试的差不多了,但是并没有执行完,可以输入
r 回到函数调用完成的位置

(Pdb) r
--Return--
> /opt/demo.py(8)get_sum()->10
-> return sum
(Pdb) p sum
10
(Pdb)

(8)假如这个时候感觉已经调试完成了,想结束了,可以直接输入 c,即可结束调试

(Pdb) c
10
[root@redrose2100 opt]#