目录

vscode-pythonC-Debug-调试-Pytorch源码

vscode python/C++ Debug 调试 Pytorch源码

文章目录

本文主要介绍如何用 vscode 来调试 python/c++ 的 Pytorch 源码。

首先要先确保有一个从源码编译的 Debug 版本的 Pytorch项目,具体 Debug 版本的源码编译网上有很多相关资料,可以自行查阅操作一波。

接下来主要就是 vscode 的配置工作。

创建需要调试的文件

首先在 Pytorch 项目工程的主目录下创建一个子文件夹,在这个子文件夹中首先写一个我们想要调试的示例代码(如果直接创建文件,import torch 可能会报错)。 like this:

https://i-blog.csdnimg.cn/blog_migrate/33d524f7d97879ed72c1b19e0fca146f.png#pic_center

配置 vscode python 调试

这里要首先安装一个 Python 的扩展。

打开并选中上述 debug.py 文件之后,点击 vscode 左边调试区,选择创建一个 launch.json 文件。

https://i-blog.csdnimg.cn/blog_migrate/916817999ded2804fafd4400924fdb64.png

.py 文件一般默认出来的 launch.json 的内容如下所示:

    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python: 当前文件",
            "type": "python",
            "request": "launch",
            "program": "${file}",
            "console": "integratedTerminal",
        }
    ]

这里要调试 Python 源码加入 “justMyCode”: false 即可,添加后如下:

    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python: 当前文件",
            "type": "python",
            "request": "launch",
            "program": "${file}",
            "console": "integratedTerminal",
            "justMyCode": false
        }
    ]

保存之后,我们进入 debug.py,按下 F5 调试运行即可调试 python 源码了。

https://i-blog.csdnimg.cn/blog_migrate/ad126bda5d6e99ad34af8f21c143b0a1.png#pic_center

可以看到代码会自动停在我们的断点处,并且左边调试栏会有中间变量的值。左上角则是调试选项,按下 F11 进入函数,或者点击调试选项的第三个功能,则会成功跳转到 pytorch 的 python 源码了。

https://i-blog.csdnimg.cn/blog_migrate/e532ed5ea45628078cc6a9715d61f979.png#pic_center

完成上面的步骤就可以进行 Python 代码的调试了。

配置 vscode C++ 调试

想要继续进一步将上面的代码走人 Pytorch 的 C++ 源码,查看相关的调用栈等需要基于上面的 python 调试的配置,在其基础上进一步设置 launch.json。

  • 首先找到左侧调试状态栏,下拉菜单,选择 Add Configuration...

https://i-blog.csdnimg.cn/blog_migrate/5cccd1db79fc63dabeee7dea258242d3.png#pic_center

然后在 launch.json 里面会自动调处以下选项,我们要选择 C/C++:(gdb) 附加

https://i-blog.csdnimg.cn/blog_migrate/1f9dff1d959e03222fdb7d5413d70613.png

这时 vscode 会在刚才 python 调试配置的基础上自动为我们添加相关默认内容:

        {
            "name": "(gdb) 附加",
            "type": "cppdbg",
            "request": "attach",
            "program": "输入程序名称,例如 ${workspaceFolder}/a.out",
            "processId": "${command:pickProcess}",
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        },
        ...

这里,我们仅需要将 "program" 修改成我们 python 解释器的路径就可以了,可以用 which python 命令来查看 python 解释器的路径,注意这个 python 解释器就是用来编译 Pytorch 源码安装的 python 环境,有多个虚拟环境的同学需要注意选择正确的 python 解释器。以我当前的环境为例,直接修改即可:

"program": "/home2/anaconda3/bin/python",

这样我们就完成了 C++ 调试的环境配置,下面来看一下如何调试。

C++ 调试

要从 .py 进入 C++ 还是需要刚才的 python 调试,让代码停住,然后 attach 到相关进程里面,这里还是以 debug.py 为例。

首先我们在 debug.py 和想查看 C++ 文件中设置对应断点,这是调试前要设置好的。

然后还是 F5 让代码先成功停在 python 断点处,然后下拉左上边的状态栏,可以看到我们刚才添加的 C++ 调试的 configuration 选项:

https://i-blog.csdnimg.cn/blog_migrate/8de63a2290873b902e571e1878dbc356.png

选择这个 (gdb) 附加 选项,并点击旁边的 Start Debugging 按钮,会需要我们选择进程:

https://i-blog.csdnimg.cn/blog_migrate/ef8a0594eefbcaa3c29bc77d80e39649.png#pic_center

我们可以在其中搜索运行的文件名字,然后选择第二个:

https://i-blog.csdnimg.cn/blog_migrate/4e5cd57c373c2b78c242fb6c9eada4d7.png

这时右下方的 TERMINAL 会弹出一个提示,我们输入 y , 并输入电脑密码即可:

https://i-blog.csdnimg.cn/blog_migrate/758b22e4fdf29348baee434b8a0abe88.png

然后左边的 CALL STACK 里面就会多了一个 (gdb) 附加 的内容,注意刚才的 python 调试栏一直没动,这个时候我们要点击 Python:当前文件Continue 按钮:

https://i-blog.csdnimg.cn/blog_migrate/09952278dd55dc553fcef2b49d2b2054.png