【问题标题】:nsight on linux not working with cuda-gdblinux 上的 nsight 无法与 cuda-gdb 一起使用
【发布时间】:2012-10-11 05:59:40
【问题描述】:

我在 Ubuntu 12.10 64 位上安装了 cuda 5。我有一个 GTX 675M,所以我使用 bumblebee 在我的 cuda 设备上运行应用程序。我正在通过 bumblebee (optirun) 运行 nsight:

frederico@zeus:~$ optirun /usr/local/cuda/libnsight/nsight

它工作得很好,我可以编译和执行应用程序。问题是当我尝试在 nsight 中使用 cuda-gdb 时,单击调试按钮时出现以下错误:

No source available for "main() at 0x403c6f" 

但如果我尝试在控制台上使用 cuda-gdb,它会起作用:

frederico@zeus:~/Dropbox/coisas/projetos/delta_cuda$ optirun cuda-gdb bin/linux/release/gpu_md5 
NVIDIA (R) CUDA Debugger
5.0 release
Portions Copyright (C) 2007-2012 NVIDIA Corporation
GNU gdb (GDB) 7.2
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
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-unknown-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /home/frederico/Dropbox/coisas/projetos/delta_cuda/bin/linux/release/gpu_md5...done.
(cuda-gdb) run
Starting program: /home/frederico/Dropbox/coisas/projetos/delta_cuda/bin/linux/release/gpu_md5 
[Thread debugging using libthread_db enabled]
[New Thread 0x7ffff1dfe700 (LWP 10437)]
[New Thread 0x7ffff07f7700 (LWP 10438)]
[New Thread 0x7fffb07f6700 (LWP 10439)]
[New Thread 0x7fff6bfff700 (LWP 10440)]
[New Thread 0x7fff23fff700 (LWP 10441)]
[New Thread 0x7ffedbfff700 (LWP 10442)]
[New Thread 0x7ffe93fff700 (LWP 10443)]
[New Thread 0x7ffe4bfff700 (LWP 10444)]
[New Thread 0x7ffe03fff700 (LWP 10445)]
[Thread 0x7ffe03fff700 (LWP 10445) exited]
[Thread 0x7fffb07f6700 (LWP 10439) exited]
[Thread 0x7ffe4bfff700 (LWP 10444) exited]
[Thread 0x7fff23fff700 (LWP 10441) exited]
[Thread 0x7ffe93fff700 (LWP 10443) exited]
[Thread 0x7ffedbfff700 (LWP 10442) exited]
[Thread 0x7ffff07f7700 (LWP 10438) exited]
[Thread 0x7fff6bfff700 (LWP 10440) exited]
[Thread 0x7ffff1dfe700 (LWP 10437) exited]

Program exited with code 030.
(cuda-gdb) 

知道会发生什么吗?

【问题讨论】:

    标签: linux cuda nsight cuda-gdb


    【解决方案1】:

    当您的应用程序挂起时会打印该消息。这意味着您的应用程序没有使用调试信息进行编译 - 在这种情况下,调试器无法将您的指令映射到源代码行。

    要在命令行 cuda-gdb 中重现此消息,您需要在断点处暂停,例如在“运行”之前先“打破主线”

    更新 - 面向未来某个时候遇到类似问题的人

    应用程序构建如下:

    1. CUDA 内核代码使用 NVCC 编译并包含调试信息。例如。 NVCC 电话是:nvcc -g -G -c mykernel.cu -o mykernel.o
    2. 此目标文件与 GCC 编译的其他目标文件链接,但未生成调试信息 - g++ mycpp1.cpp mycpp2.cpp mykernel.cu -o mycudaapplication。这导致一些部分调试信息不​​足以让 cuda-gdb 正确解析路径。

    Nsight Eclipse 版在调试 CUDA 应用程序时默认依赖 cuda-gdb 源路径解析来查找要在编辑器中打开的文件。

    【讨论】:

    • 我将 "-g -G" 传递给 nvcc,这是手动 cuda-gdb 的结果:pastebin.com/npfnWGGk
    • 我刚刚重新测试 - 我只有在使用 Nsight 的“发布”版本时才会看到该消息。它不会为“调试”构建显示此消息...
    • 请注意,您的命令行调试器不会打印您的源代码行(这再次暗示您的可执行文件没有调试信息。请参阅此示例的第 22 行 - pastebin.com/8SgvmXhn
    • 好的,我收回我的评论 - 看起来你的可执行文件中确实有调试信息(当没有调试信息时,GDB 会打印)。可能发生的情况是,如果您的 make 在构建后移动了可执行文件,那么 GDB 和 Nsight 就再也找不到源文件了。我正在调查以了解更多信息。
    • 我不知道如何,但你可以设置一个聊天室,以便我可以快速向你发送更多信息
    猜你喜欢
    • 2012-10-11
    • 2019-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-12
    • 1970-01-01
    • 2019-01-15
    相关资源
    最近更新 更多