本文目录

  • PDB调试
  • 两种方式调试
  • 具体操作
  • PDB调试

    笔者的项目涉及了大量的环境、shell脚本等,用IDE调试非常麻烦,因此学着使用PDB调试,记录分享给大家。

    pdb调试是为了在远程服务器上,无界面的模式下,进行的。
    由于工业界的正版IDE很贵,当然也可以使用VSCODE进行调试。

    大佬的话:最好的调试方法是打印.

    两种方式调试

    1. 非侵入式方法
      python3 -m pdb filename.py 如果还有后续的参数,直接加在它后面。

    如果是要调试Pytorch的神经网络,如下命令:
    torchrun -m pdb filename.py : 注意调试的时候使用一个GPU, 一个线程来调试最好。

    1. 侵入式方法(推荐这个
      需要在运行的文件中增加一行
      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                      # 打印堆栈信息,最新的帧在最底部
    
  • 忽略某段代码
    直接跳转到line_number开始
  • j line_number
    
  • 退出pdb
  • q
    

    注意,这里的退出pdb是退出了整个debugger系统。
    如果要重新开始下一次调试:(即保留断点设置和debugger设置)

    restart
    

    来源:CyanFishhh

    物联沃分享整理
    物联沃-IOTWORD物联网 » PDB调试方法

    发表评论