笔者的项目涉及了大量的环境、shell脚本等,用IDE调试非常麻烦,因此学着使用PDB调试,记录分享给大家。
pdb调试是为了在远程服务器上,无界面的模式下,进行的。
由于工业界的正版IDE很贵,当然也可以使用VSCODE进行调试。
大佬的话:最好的调试方法是打印.
python3 -m pdb filename.py
如果还有后续的参数,直接加在它后面。如果是要调试Pytorch的神经网络,如下命令:torchrun -m pdb filename.py
: 注意调试的时候使用一个GPU, 一个线程来调试最好。
import pdb;pdb.set_trace()
查看源代码:l
查看当前位置前后11行。ll
,查看当前函数的所有代码
添加断点:
b # 单独使用可以用来显示目前已经具有的所有断点 b lineno # 给第几行添加断点 b filename:lineno # 给某个函数的第几行添加断点 b functionname # 给某个函数添加断点
tbreak tbreak lineno tbreak filename:lineno tbreak functionname
cl # 清楚所有断点 cl filename:lineno cl bpnumber [bpnumber ...]
p expression p param # 如果变量是个复杂的对象,可以先打印查看变量的属性。 p dir(param) # 然后查看变量的某个属性值 p param.xxx
s # 执行下一行,能够进入函数体 n # 执行下一行,不进入函数体 r # 执行下一行,如果在函数中,直接运行到函数返回处 c # 持续执行程序,直到遇到一个断点 unt lineno # 持续执行直到运行到指定行 j lineno # 直接跳转到指定行
a # 在函数中时打印函数的参数和参数的值
whatis expression # 打印表达式类型,也可以用来打印变量值
interact # 启动一个python的交互式解释器,使用(ctrl + d)返回pdb
w # 打印堆栈信息,最新的帧在最底部
j line_number
q
注意,这里的退出pdb是退出了整个debugger系统。
如果要重新开始下一次调试:(即保留断点设置和debugger设置)
restart