python调试神器pdb

1.简介

对于开发者来说,一个好用的debug工具可以快速准确的定位程序问题,python的dubug方式大概可以归为3类:

    1).print,log大法:初级选手,输出直观但不够灵活

    2).ide debug:功能强大,但服务器命令行上调试不行

    3).pbd,PySnooper:高级选手,功能强大而且灵活(PySnooper使用虽然简单,但输出信息过于冗余)

本文主要讲活好话少的pyhton自带debug神器--pdb。

2.pdb使用

pdb常用命令 :

命令英文含义中文含义使用频率
nnext

执行下一条语句

极高
llist列出源码极高
sstep进入函数极高
rreturn执行当前运行函数到结束极高
aargs列出当前执行函数的参数极高
pprint打印变量值(也可用pp)极高
untuntil执行到下一行(跳出循环),或者当前堆栈结束
ccontinue继续执行,直到遇到下一条断点
uup执行跳转到当前堆栈的上一层(和s互逆)极高
qquit退出

极高  

pdb使用方式:

1).命令行方式

举个例子:

def func(x, y):
    k = 10
    z = 1
    for i in range(k):
        z += (x + y) * i
    return z


def main():
    x, y = 1, 2
    z = func(x, y)
    print(z)


if __name__ == '__main__':
    main()

 

python -m pdb pdb_test.py
这种方式程序会自动打断点,断点位置为程序代码文本顺序最上边。此时pdb会在第一行def func(x, y):处打断点.
Macbook:script m$ python -m pdb pdb_test.py 
> /Users/m/data/script/pdb_test.py(23)<module>()
-> def func(x, y):
(Pdb) 

2).程序导入pdb包方式

举个例子:

import pdb


def func(x, y):
    k = 10
    z = 1
    for i in range(k):
        z += (x + y) * i
    z += 20
    return z


def main():
    pdb.set_trace()
    x, y = 1, 2
    z = func(x, y)
    print(z)


if __name__ == '__main__':
    main()
Macbook:script m$ python pdb_test.py 
> /Users/m/data/script/pdb_test.py(15)main()
-> x, y = 1, 2
(Pdb) n
> /Users/m/data/script/pdb_test.py(16)main()
-> z = func(x, y)
(Pdb) s
--Call--
> /Users/m/data/script/pdb_test.py(4)func()
-> def func(x, y):
(Pdb) n
> /Users/m/data/script/pdb_test.py(5)func()
-> k = 10
(Pdb) n
> /Users/m/data/script/pdb_test.py(6)func()
-> z = 1
(Pdb) n
> /Users/m/data/script/pdb_test.py(7)func()
-> for i in range(k):
(Pdb) n
> /Users/m/data/script/pdb_test.py(8)func()
-> z += (x + y) * i
(Pdb) n
> /Users/m/data/script/pdb_test.py(7)func()
-> for i in range(k):
(Pdb) unt
> /Users/m/data/script/pdb_test.py(8)func()
-> z += (x + y) * i
(Pdb) l
  3     
  4     def func(x, y):
  5         k = 10
  6         z = 1
  7         for i in range(k):
  8  ->         z += (x + y) * i
  9         z += 20
 10         return z
 11     
 12     
 13     def main():
(Pdb) r
--Return--
> /Users/m/data/script/pdb_test.py(10)func()->156
-> return z
(Pdb) u
> /Users/m/data/script/pdb_test.py(16)main()
-> z = func(x, y)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值