首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >VSCode无法调试Cython封装的CUDA代码(但可以)

VSCode无法调试Cython封装的CUDA代码(但可以)
EN

Stack Overflow用户
提问于 2022-07-01 06:49:49
回答 1查看 146关注 0票数 1

背景:在Ubuntu20.04上运行VSCode

已完成以下工作:

(a)编译和构建CUDA代码的Cython包装器(打包为共享库.so);

(b) Python脚本导入上述.so文件运行,并且可以在终端中直接从cuda-gdb中调试(感谢此链接以及启用了ptrace_scope),可以看到GPU变量并切换焦点。

(c)另外,在命令行CUDA和VSCode的原生IDE中,我都能够在不同的CUDA代码(没有包装、纯cuda代码链接和编译到可执行文件)中设置断点。如图所示,这个youtube视频

问题:从(b)我知道GPU调试符号在那里,并且可以被cuda捕获。但最终,我希望能够在VSCode中进行调试。我在launch.json中尝试了以下4种方法(正如我对可执行文件所做的那样,但对于Cython接口的python脚本却不能)

  1. 使用command:cuda.pickProcess,然后选择python过程:
代码语言:javascript
运行
复制
{
“name”: “CUDA C++: Attach”,
“type”: “cuda-gdb”,
“request”: “attach”,
“processId”: “${command:cuda.pickProcess}”

结果1:在Debug Console选项卡上什么也没有出现,没有断点命中

  1. 使用ps grep查找进程ID,将其直接放在processId中
代码语言:javascript
运行
复制
    {
    “name”: “CUDA C++: Attach”,
    “type”: “cuda-gdb”,
    “request”: “attach”,
    “processId”: “12345” #The Process ID = 12345
    },

结果2:和1一样,什么都没有发生。

3)尝试调用python可执行文件并提供python脚本作为参数(test.py运行cuda代码,因为它已经通过命令行cuda验证)

代码语言:javascript
运行
复制
{
“name”: “(gdb) Launch Python”,
“type”: “cuda-gdb”,
“request”: “launch”,
“program”: “/home/jeff/JTDev/venv/bin/python3”,
“args”:”/home/jeff/JTDev/03 Cython/JTCudaLibCython/test.py”,
“stopAtEntry”: false,
}

结果3: cuda-gdb似乎在“调试控制台”选项卡中启动,但它似乎没有做任何事情(如果运行了脚本+ CUDA代码,那么如果求和完成或没有完成,它就会有输出):

代码语言:javascript
运行
复制
11.7 release
Portions Copyright (C) 2007-2022 NVIDIA Corporation
GNU gdb (GDB) 10.2
Copyright (C) 2021 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type “show copying” and “show warranty” for details.
This GDB was configured as “x86_64-pc-linux-gnu”.
Type “show configuration” for configuration details.
For bug reporting instructions, please see:
.
Find the GDB manual and other documentation resources online at:
.

For help, type “help”.
Type “apropos word” to search for commands related to “word”.
[Thread debugging using libthread_db enabled]
Using host libthread_db library “/lib/x86_64-linux-gnu/libthread_db.so.1”.
[Inferior 1 (process 211846) exited with code 02]"
  1. 将settings.json中的类型从launch.json中的“cuda”切换到“cppdbg”:
代码语言:javascript
运行
复制
{
“name”: “(gdb) Launch 1123”,
“type”: “cppdbg”,
“request”: “launch”,
“program”: “/home/jeff/JTDev/venv/bin/python3”,
“args”: [
“/home/jeff/JTDev/03 Cython/CythonCUDA/test.py”
],
“stopAtEntry”: false,
“cwd”: “${workspaceFolder}”,
“externalConsole”: false,
“MIMode”: “gdb”,
“setupCommands”: [
{
“description”: “Enable pretty-printing for gdb”,
“text”: “-enable-pretty-printing”,
“ignoreFailures”: true
}
]
}

结果4:现在它将运行python脚本,与第3次尝试不同,它将在离开内核的行处中断(而不是CUDA单独的线程行)。因此,VSCode可以在此设置中运行Python,VSCode调试符号可以由VSCode IDE获取。如前所述,cuda-gdb证明GPU调试符号就在这里,但是当调用launch.json中的“type”中的cuda-gdb时,cuda调试器在VSCode中没有被正确启动,以获取GPU调试符号并中断设备代码行。

任何帮助/提示都是非常感谢的。

EN

Stack Overflow用户

发布于 2022-10-29 07:37:08

确保编译带有调试符号信息的cu文件。

尝试使用-G -g -O0标志

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72825357

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档