转载请注明作者和出处: http://blog.csdn.net/john_bh/

1. pdb 介绍

pdb 模块定义了一个交互式源代码调试器,用于 Python 程序。它支持在源码行间设置(有条件的)断点和单步执行,检视堆栈帧,列出源码列表,以及在任何堆栈帧的上下文中运行任意 Python 代码。它还支持事后调试,可以在程序控制下调用。调试器的提示符是 (Pdb)

两种使用方法:

  1. 非侵入式方法(不用额外修改源代码,在命令行下直接运行就能调试)
    python -m pdb Test.py
    
  2. 侵入式方法(需要在被调试的代码中添加一行代码然后再正常运行代码)
    import pdb
    pdb.set_trace()
    
    运行代码,程序会自动在pdb.set_trace()暂停并进入pdb调试环境,可以用命令p查看变量,或者用命令c继续运行。

当你在命令行看到下面这个提示符时,说明已经正确打开了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()
Logo

一站式 AI 云服务平台

更多推荐