使用 Pdb 调试 Python 程序

启动方法( 2 种)

  • 侵入式方法(需要在被调试的代码中添加一行代码然后再正常运行代码)

    import pdb;pdb.set_trace()

  • 非侵入式方法(类似于 gdb ,不用额外修改源代码,在命令行下直接运行就能调试)

    python3 -m pdb filename.py

 

Pdb 命令

查看源代码

  • 命令 l :查看当前位置前后11行源代码(多次会翻页),当前位置在代码中会用–>这个符号标出来;
  • 命令 ll :查看当前函数或框架的所有源代码;

 

添加断点

  • 命令 b line_number :例如 b 18 在当前文件的第 $$18$$ 行打断点;

  • 命令 b filename:line_number :在 filename 文件的第 line_number 行打断点;

  • 命令 b functionname :在函数 functionname 处打断点;

  • 命令 b :列出所有中断,包括每个断点、命中该断点的次数、当前的忽略次数以及关联的条件;

 

清除断点

  • 命令 cl :清除所有断点;
  • 命令 cl bpnumber [bpnumber ...] :清除指定行的断点,如有多个,则用空格隔开;
  • 命令 cl filename:lineno :清除指定文件的某一行的断点;

 

打印变量值

  • 命令 p expressionexpressionPython 表达式;

 

逐行调试命令

  • 命令 s :执行下一行(能够进入函数体);
  • 命令 n :执行下一行(不会进入函数体);
  • 命令 r :执行下一行(在函数中时会直接执行到函数返回处);

 

非逐行调试命令

  • 命令 c :持续执行下去,直到遇到一个断点;
  • 命令 unt lineno :持续执行直到运行到指定行(或遇到断点);
  • 命令 j lineno :直接跳转到指定行(被跳过的代码不执行);

 

查看函数参数

  • 命令 a :在函数中时打印函数的参数和参数的值;

 

打印变量类型

  • 命令 whatis expression :打印表达式的类型,常用来打印变量值;

 

启动交互式解释器

  • 命令 interact :启动一个 python 的交互式解释器,使用当前代码的全局命名空间(使用 ctrl+d 返回 pdb );

 

打印堆栈信息

  • 命令 w :打印堆栈信息,最新的帧在最底部。箭头表示当前帧;

 

退出pdb

  • 命令 q :退出 pdb 程序;

 

参考资料