使用 pdb 进行调试
pdb 是 python 自带的一个包,为 python 程序提供了一种交互的源代码调试功能,主要特性包括设置断点、单步调试、进入函数调试、查看当前代码、查看栈片段、动态改变变量的值等。pdb 提供了一些常用的调试命令,详情见表 1。
命令 | 解释 |
---|---|
break 或 b 设置断点 | 设置断点 |
continue 或 c | 继续执行程序 |
list 或 l | 查看当前行的代码段 |
step 或 s | 进入函数 |
return 或 r | 执行代码直到从当前函数返回 |
exit 或 q | 中止并退出 |
next 或 n | 执行下一行 |
pp | 打印变量的值 |
help | 帮助 |
下面结合具体的实例讲述如何使用 pdb 进行调试。
1234567 | import pdb a = \”aaa\” pdb.set_trace() b = \”bbb\” c = \”ccc\” final = a + b + c print final |
开始调试:直接运行脚本,会停留在 pdb.set_trace() 处,选择 n+enter 可以执行当前的 statement。在第一次按下了 n+enter 之后可以直接按 enter 表示重复执行上一条 debug 命令。
123456789101112131415161718192021222324 | [root@rcc–pok–idg–2255 ~]# python epdb1.py > /root/epdb1.py(4)?() -> b = \”bbb\” (Pdb) n > /root/epdb1.py(5)?() -> c = \”ccc\” (Pdb) > /root/epdb1.py(6)?() -> final = a + b + c (Pdb) list 1 import pdb 2 a = \”aaa\” 3 pdb.set_trace() 4 b = \”bbb\” 5 c = \”ccc\” 6 -> final = a + b + c 7 print final [EOF] (Pdb) [EOF] (Pdb) n > /root/epdb1.py(7)?() -> print final (Pdb) |
退出 debug:使用 quit 或者 q 可以退出当前的 debug,但是 quit 会以一种非常粗鲁的方式退出程序,其结果是直接 crash。
1234567891011121314151617 | [root@rcc–pok–idg–2255 ~]# python epdb1.py > /root/epdb1.py(4)?() -> b = \”bbb\” (Pdb) n > /root/epdb1.py(5)?() -> c = \”ccc\” (Pdb) q Traceback (most recent call last): File \”epdb1.py\”, line 5, in ? c = \”ccc\” File \”epdb1.py\”, line 5, in ? c = \”ccc\” File \”/usr/lib64/python2.4/bdb.py\”, line 48, in trace_dispatch return self.dispatch_line(frame) File \”/usr/lib64/python2.4/bdb.py\”, line 67, in dispatch_line if self.quitting: raise BdbQuit bdb.BdbQuit |
打印变量的值:如果需要在调试过程中打印变量的值,可以直接使用 p 加上变量名,但是需要注意的是打印仅仅在当前的 statement 已经被执行了之后才能看到具体的值,否则会报 NameError: 错误。
上一篇:Python要你命三千