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 中开始调试即可。

一些常见操作:

  1. 由于 python 优秀的解释性语言特性,在调试控制台我们可以输入任意 python 语句,来临时更改一些变量或者查看值。

  2. 如果程序需要运行在另一需要通过 SSH 连接的主机上,考虑用前向代理(本地转发),使得本地 VS Code 访问 9501 端口相当于访问远程的,如:
    先 SSH 连接另一主机

ssh -L 9501:localhost:9501 RemoteXXX

再在该主机上运行程序,并在本地点击调试与运行。
如果只有一次跳转,一般 VS Code 会帮你自动转发,两次跳转的时候,第二次跳转时才需要前向代理,参考:我的另一篇博客

posted @ 2024-09-11 10:50  Cold_Chair  阅读(171)  评论(0编辑  收藏  举报