Python----Python的pdb代码调试方法(python中pdb)

网友投稿 580 2022-08-23


Python----Python的pdb代码调试方法(python中pdb)

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

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

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

import pdbdef 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)()-> 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)()-> sum=get_sum(num)(Pdb) p num5(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 sum0(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 sum3(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 sum6(Pdb) p i4(Pdb)

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

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

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

(Pdb) c10[root@redrose2100 opt]#


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:springboot运行到dokcer中 dockerfile的场景分析
下一篇:Python高级语法(11)多线程、多进程、协程简介与选择(python多进程和多线程协程)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~