之前用vscode写python debug的时候只知道两种:

  1. 写一个launch文件,里边写配置文件,例如:

    {
      "name": "test1",
      "type": "debugpy",
      "request": "launch",
      "program": "${file}",
      "console": "integratedTerminal",
      "args": [
          "--gradient_checkpointing", "True",
          "--output_dir", "/ssd/yangjz/PythonProject_2/MedM-VL/work_dirs/MedM-VL-2D-3B-en-finetune-gitee_test_3",
          "--dataloader_num_workers", "8",
          "--dataloader_pin_memory", "True",
          "--dataloader_persistent_workers", "True",
          "--num_train_epochs", "3",
      ],
      "env": {
          "TRANSFORMERS_OFFLINE": "1",
          "HF_DATASETS_OFFLINE": "1",
          "CUDA_VISIBLE_DEVICES": "6",
      }
    }
    

    这样做很不方便,一个是需要频繁改动这个配置文件,一个是需要另外写一个测试文件(也可以不写),最重要的还是要一个一个写一个一个改,如果已经有bash脚本并且参数比较多的情况下,这个工作就较繁琐且重复。之前一致没调研过相关的,就一直用这个,就导致每次很讨厌debug,因为要改很多东西。

  2. 使用breakpoint或者pdb,breakpoint实际上也是调用的pdb,这个是后来跟实验室以为同学了解的,这种在已有bash文件,且不想写debug 配置文件的时候还可以,但是还是有一点不方便的地方就是,需要提前在需要打断点的地方提前放一个breakpoint标记,如果想在某个包内部查看就得需要修改包的源文件,修改源文件这一点有点难以接受。
    这两天也了解了ipdb和bupd,pubd有一个界面,但是有点卡,用不习惯。

    import pdb
    
    def add(a, b):
        pdb.set_trace()  # 断点,程序运行到这里进入调试交互界面
        return a + b
      
    add(1, 2)
    
    # 或者
    
    def add(a,b):
        breakpoint()
        return a+b
    add(1,2)
    

这两种都有不方便的点,后来一直搜如何在vscode 优雅的debug,发现了下边这个文章:无痛使用 vscode 进行使用shell启动的 Python 脚本 debug方式

这个比上两种好很多,主要流程是使用debugpy在服务器或者本机开一个端口,然后使用vscode连接这个端口,然后就可以像第一种方式那样使用vscode debug了。主要流程如下:

  1. 同样在launch种写一个文件:

    {
        "version": "0.2.0",
        "configurations": [
    
            {
                "name": "Python: Attach",
                "type": "debugpy",
                "request": "attach",
                "connect": {
                    "host": "localhost",
                    "port": 9001
                }
            }
        ]
    }
    

    其中9001是要监听的端口号,选择一个未使用的即可。

    然后在原来的sh文件中修改:

    python -m debugpy --listen 9001 --wait-for-client test.py
    

    在终端运行这个命令,然后在vscode中点击debug即可,就可以像原来那样手动打断点了。

    image-20260819225814266

    这个虽然也需要写配置文件,但是只需要写一次,主要修改在sh文件中,只需要在原本的sh文件中添加--debugpy xxx 即可