# 深度学习python代码使用pdb调试
# 简介
pdb 模块定义了一个交互式源代码调试器,用于 Python 程序。它支持在源码行间设置(有条件的)断点和单步执行,检视堆栈帧,列出源码列表,以及在任何堆栈帧的上下文中运行任意 Python 代码。它还支持事后调试,可以在程序控制下调用。
# 用法
# 启用pdb的方式
非侵入式(不修改源码,在命令行中启用)
python3 -m pdb filename.py
侵入式(在需调试的源码中添加一行)
import pdb;pdb.set_trace()
# pdb指令
| 操作 | 指令 | 备注 |
| 查看源码list | l: 查看当前位置前后11行源代码(多次会翻页) ll: (longlist)查看当前函数或框架的所有源代码 l first: 列出first行周围11条代码 l first,second: 列出first--second范围的代码 | 当前位置在代码中会用-->这个符号标出来 |
| 添加断点break | b: 列出当前所有断点,和断点执行到统计次数 b lineno: 断点添加到哪一行 b filename:lineno: 断点添加到某文件的某一行 b functionname: 在函数执行的第一行设置断点 | |
| 添加临时断点 temporary break | tbreak tbreak lineno tbreak filename:lineno tbreak functionname | 相关操作同b |
| 清除断点 clear | cl: 清除所有断点,会提示确认(包括临时断点) cl filename:lineno: 清除指定文件行的断点 cl bpnumber [bpnumber ...]: 清除指定序号的断点 | bpnumber 断点序号(多个以空格分隔) |
| 停用/激活/忽略断点 | disable bpnumber: 停用断点,和cl的区别是,断点依然存在,只是不启用 enable bpnumber: 激活断点 ignore bpnumber [count]: 为指定的断点编号设置忽略次数。 | 如果省略 count,则忽略次数将设置为 0。 |
| 条件断点 | condition bpnumber [condition]: 为断点设置一个新 condition,它是一个表达式,且它的计算值为 true 时断点才起作用。 | 如果没有给出 condition,则删除现有条件,也就是将断点设为无条件。 |
| 打印变量值 print | p expression pp expression: pretty print | |
| 逐行调试 | s: (step)执行下一条命令 n: (next)执行下一条语句 r: (return)执行当前运行函数到结束 | |
| 非逐行调试 | c: (continue)继续执行,直到遇到下一条断点 unt lineno: (until)执行到指定行 j lineno: (jump)直接跳转到指定行(被跳过的代码不执行) | |
| 查看函数参数 args | a: 在函数中时打印当前函数的参数列表 | |
| 打印变量类型 | whatis expression | |
| 启动交互式解释器 | interact: 启动一个python的交互式解释器,使用当前代码的全局命名空间(使用ctrl+d返回pdb) | |
| 打印堆栈信息 where | w: 打印堆栈信息,最新的帧在最底部。箭头表示当前帧。 | |
| 退出pdb | q |
# 参考
https://zhuanlan.zhihu.com/p/37294138 (opens new window) https://docs.python.org/zh-cn/3/library/pdb.html (opens new window) https://www.cnblogs.com/klb561/p/12057436.html (opens new window)