Python----Python的pdb代码调试方法

【原文链接】

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

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

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]#
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

redrose2100

您的鼓励是我最大的创作动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值