Python Pdb 调试

Pdp 调试

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()

Python 教程 Python 入门 Python 时间 Python JSON