VScode调试相关问题:基于Debugpy

VScode调试相关问题:基于Debugpy

1. 问题背景

  • 本次记录主要针对几种较麻烦的调试情况,如下:
    • 对于带参数的程序,如果参数较少的话可以直接在.vscode/launch.json 中编辑即可,但是如果参数较多的话,编写冗长的配置文件将很麻烦
    • 通过bash启动的批处理文件,例如bash train.sh
    • 启动的python程序内部还调用了os.system("python file.py")启动新的进程,这种情况下新进程没办法直接进行调试

2. 解决方法

  • 针对以上几种情况,可以在VScode中通过debugpy模块,实现简单的调试,步骤如下:

    1. 配置.vscode/launch.json文件:

      • 注意:这里localRoot需要配置成待调试的主程序所在的工作目录,例如,如果是启动scripts下的sh文件,则localRoot需要配置成"${workspaceFolder}\scripts"
      {
          // 使用 IntelliSense 了解相关属性。 
          // 悬停以查看现有属性的描述。
          // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
          "version": "0.2.0",
          "configurations": [
              {
                  "name": "Python: 远程调试",
                  "type": "python",
                  "request": "attach",
                  "connect": {
                      "host": "0.0.0.0",
                      "port": 5678
                  },
                  "pathMappings": [
                      {
                          "localRoot": "${workspaceFolder}", 
                          "remoteRoot": "."
                      }
                  ],
                  "justMyCode": true
              }
          ]
      }
      
    2. 在启动的命令行中添加-m debugpy --listen 5678 --wait-for-client

      • 情况1:普通的python文件/sh文件内

        python file.py 
        -> python -m debugpy --listen 5678 --wait-for-client file.py
        
      • 情况2:需要os.system()启动的文件

        正常启动python file.py
        然后在os.system()所对应的命令中加上"-m debugpy --listen 5678 --wait-for-client"
        
    3. 启动调试(f5)

3. 相关问题记录:

  • (未解决)尝试了 https://zhuanlan.zhihu.com/p/560405414 的方法,但是不成功,启动调试后会卡在断点处
  • 使用torch分布式训练启动一个train.py文件,然后·train.py文件内部又通过os.system()启动新的进程,会出现端口重复占用的问题(多个进程重复占用端口),指定参数--nproc_per_node=1即可(调试情况下)
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值