VScode调试相关问题:基于Debugpy
1. 问题背景
- 本次记录主要针对几种较麻烦的调试情况,如下:
- 对于带参数的程序,如果参数较少的话可以直接在
.vscode/launch.json
中编辑即可,但是如果参数较多的话,编写冗长的配置文件将很麻烦 - 通过
bash
启动的批处理文件,例如bash train.sh
- 启动的python程序内部还调用了
os.system("python file.py")
启动新的进程,这种情况下新进程没办法直接进行调试
- 对于带参数的程序,如果参数较少的话可以直接在
2. 解决方法
-
针对以上几种情况,可以在VScode中通过
debugpy
模块,实现简单的调试,步骤如下:-
配置
.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 } ] }
- 注意:这里
-
在启动的命令行中添加
-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"
-
-
启动调试(f5)
-
3. 相关问题记录:
- (未解决)尝试了 https://zhuanlan.zhihu.com/p/560405414 的方法,但是不成功,启动调试后会卡在断点处
- 使用torch分布式训练启动一个
train.py
文件,然后·train.py
文件内部又通过os.system()
启动新的进程,会出现端口重复占用的问题(多个进程重复占用端口),指定参数--nproc_per_node=1
即可(调试情况下)