两种方法利用原生功能, 对python进行debug:
python -m pdb file.pyor
breakpoint()基本的命令1
打印帮助信息
help
help list
# 简写 h
帮助结果:
longlist | ll # 说明两个命令一样
l(ist) # l 和 list 一样
查看程序运行的位置:
list # 显示11行源码
list . # 并标记当前运行的位置
# 简写 l
longlist # 显示当前函数的所有源码
# 简写 ll
运行:
next # 运行下一行
# 简写 n
continue # 运行到下一个断点/结尾
# 简写 c, cont
until 23 # 运行到第23行
# 简写 unt
jump 23 # 跳到第23行
# 简写 j
step # 遇到函数进入运行
# 简写 s
return # 从函数中跳出运行
# 简写 r
检索和查询:
where # 打印堆栈, 最新的在底部
什么是堆栈?
up # 查看上一个堆栈, 寻找是谁赋值的.
up 3 # 查看上3个堆栈
# 简写 u
down # 在up后, 恢复一步堆栈. 最后回到up的起始点
down 3 # 恢复3步堆栈
# 简写 d
args # 打印当前所在函数的参数值
# 简写 a
whatis var1 # 打印参数的类型
whatis var1+var2 # 或者表达式结果的类型
p var1+var2 # 打印表达式的值
添加断点:
continue 12 可以直接运行到某行, 也有断点的效果. 和后面临时断点类似.
b 12 在某行添加断点
b func 在函数第一行添加断点
b test.py:12 在文件的第12行添加断点
b 查看断点设置
临时断点: 执行一次后自动删除
tbreak 语法和 b 一样
清除断点:
cl 12 15 17 清除指定 的断点
cl test.py:15 清除指定文件中的指定断点
cl 清除当前文件的所有断点
启动交互解释器: interact 使用ctrl+d返回
退出调试: q
一些技巧
- 空白回车, 就是重复上一个命令.
- 有时候命令缩写会和python语句冲突, 默认优先执行pdb命令,
但如果想强制执行python语句, 需要在前面加
!, 如:
a # 执行查看函数参数
!a # 打印变量a的值
- 将
breakpoint()放在if中, 这样只有满足某种条件后会自动进入调试模式. testing.py --pdb这样会自动的在错误的时候进入调试模式.