VScode python 调试深度学习项目 debugpy 库
以前打 OI,限于辣鸡 NOI Linux 没有靠谱的 IDE。只能用终端 gdb 来调试 C++。
gdb 基本功能还是有的,但是每次启动,之前的东西(断点,监控变量)都会消失,需要重新输一遍。
所以当时发现还是输出调试好,当然前置条件是写的两百行左右的程序编译时间短(1s 左右),从头运行一遍也快(一个题规定的运行时间也是 1s 左右)
对于大点的项目,主要是编译和预运行(现在手里的深度学习项目加载个数据和模型得一分钟)的时间太长,输出调试十分不便,还是需要一个动态的调试手段。
上网学了下 python 项目的调试方法,发现一个非常适用于深度学习方法:
https://www.yuque.com/nulinulizainuli-rhgcd/gt6csv/reg1f9q1y69sppwu?singleDoc#
首先安装 debugpy 库
pip install debugpy -U
需要注意版本号,目前最新的是 1.8.5,但我发现它和我现在一个环境中的 typing 库不兼容,所以把 debugpy 降级到了 1.5.1:
pip install debugpy==1.5.1
然后在 VScode 左侧边栏点击运行和调试,创建一个 launch.json,configurations 中添加
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "sh_file_debug",
"type": "debugpy",
"request": "attach",
"connect": {
"host": "localhost",
"port": 9501
},
"justMyCode": false
},
]
}
如果在 python 环境包里的代码打断点,需要关闭 justMyCode ,默认值是 True。
python 代码前加入:
import debugpy
try:
# 5678 is the default attach port in the VS Code debug configurations. Unless a host and port are specified, host defaults to 127.0.0.1
debugpy.listen(("localhost", 9501))
print("Waiting for debugger attach")
debugpy.wait_for_client()
except Exception as e:
pass
然后设置断点,运行 python 程序,会显示在 Waiting for debugger attach
此时 VScode 中开始调试即可。
一些常见操作:
-
由于 python 优秀的解释性语言特性,在调试控制台我们可以输入任意 python 语句,来临时更改一些变量或者查看值。
-
如果程序需要运行在另一需要通过 SSH 连接的主机上,考虑用前向代理(本地转发),使得本地 VS Code 访问 9501 端口相当于访问远程的,如:
先 SSH 连接另一主机
ssh -L 9501:localhost:9501 RemoteXXX
再在该主机上运行程序,并在本地点击调试与运行。
如果只有一次跳转,一般 VS Code 会帮你自动转发,两次跳转的时候,第二次跳转时才需要前向代理,参考:我的另一篇博客