pdb
是一种在命令行下面调试的古老的方法,虽然没有现代IDE集成的debug
功能强大,但是简单通用,大部分语言都支持。
main.py
1 for x in range(10):
2 pass
3
4 print('a')
5 print('b')
6 print('c')
7 print('d')
8 print('e')
9 print('f')
10 print('g')
>>> python -m pdb main.py
-> for x in range(10): # pdp 把我们的代码解析成一行一行执行,当前执行第一行
(Pdb) n # 执行下一行
-> pass
(Pdb) n # 下一行
-> for x in range(10):
(Pdb) p x # p 查询当前 x 的值
1
(Pdb) j 8 # 定位到行
-> print('e')
(Pdb) n
e
-> print('f')
(Pdb) q # 退出
# 我们就这样一行一行的追踪错误
断点
# 有时候一行一行的运行会有点费时间,pdb还支持设置断点
(Pdb) b 8 # 8 行断点
(Pdb) b 9 # 9 行断点
(Pdb) b 9 # 10 行断点
# 查看当前断点
(Pdb) b
Num Type Disp Enb Where
1 breakpoint keep yes at /Users/jason/Desktop/env3/main.py:8
2 breakpoint keep yes at /Users/jason/Desktop/env3/main.py:9
3 breakpoint keep yes at /Users/jason/Desktop/env3/main.py:10
# 删除断点
(Pdb) cl 9
# 断点运行
(Pdb) c # 执行第一个断点停止
a
b
c
d
-> print('e')
(Pdb) c # 下一个断点
e
-> print('f')
help
# 更多 Pdb 命令
(Pdb) h
Documented commands (type help ):
========================================
EOF c d h list q rv undisplay
a cl debug help ll quit s unt
alias clear disable ignore longlist r source until
args commands display interact n restart step up
b condition down j next return tbreak w
break cont enable jump p retval u whatis
bt continue exit l pp run unalias where
Miscellaneous help topics:
==========================
exec pdb
debug
是个经验活,没有多少方法论可以总结。我自己在日常的开发中,使用得最多的调试方法,还是print()