转载请注明作者和出处: http://blog.csdn.net/john_bh/
1. pdb 介绍
pdb 模块定义了一个交互式源代码调试器,用于 Python 程序。它支持在源码行间设置(有条件的)断点和单步执行,检视堆栈帧,列出源码列表,以及在任何堆栈帧的上下文中运行任意 Python 代码。它还支持事后调试,可以在程序控制下调用。调试器的提示符是 (Pdb)
两种使用方法:
- 非侵入式方法(不用额外修改源代码,在命令行下直接运行就能调试)
python -m pdb Test.py
- 侵入式方法(需要在被调试的代码中添加一行代码然后再正常运行代码)
运行代码,程序会自动在pdb.set_trace()暂停并进入pdb调试环境,可以用命令p查看变量,或者用命令c继续运行。import pdb pdb.set_trace()
当你在命令行看到下面这个提示符时,说明已经正确打开了pdb:
(Pdb)
2. 常用命令
命令 | 功能 |
---|---|
h | 帮助 |
l | (list)列出源码,如果不带参数,则列出当前行周围的 11 行,或继续前一个列表。 |
ll | 列出当前函数或帧的所有源代码。 |
b | (break)添加断点,列出当前所有断点,和断点执行到统计次数 |
b line_no | 当前脚本的line_no行添加断点 |
b filename:line_no | 脚本filename的line_no行添加断点 |
b function | 在函数function的第一条可执行语句处添加断点 |
tbreak | 临时断点,在第一次命中时会自动删除。它的参数与 break 相同 |
cl | 清除断点 |
p | (print)输出expression的值,打印变量值 |
c | (continue)继续执行,直到遇到下一条断点,非逐行调试命令 |
r | (return)继续运行,直到当前函数返回 |
a | (args)列出当前执行函数的参数,查看函数参数 |
interact | 启动交互式解释器 |
whatis | 打印变量类型 |
w | (where)打印当前执行堆栈 |
s | (step)执行下一条命令,如果本句是函数调用,则s会执行到函数的第一句 |
n | (next)执行下一条语句,如果本句是函数调用,则执行函数,接着执行当前执行语句的下一条。 |
run | 重新启动debug,相当于restart |
q | (quit)退出debug,退出pdb |
3. 代码
import pdb
class MyObj:
def __init__(self, num_loops):
self.count = num_loops
def go(self):
for i in range(self.count):
pdb.set_trace()
print(i)
return
if __name__ == '__main__':
MyObj(5).go()