我在我的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)
对发生什么的想法?
当您的应用程序暂停时,该消息将打印。这意味着您的应用程序未包含调试信息 - 在这种情况下,调试器无法将您的说明映射到源线。
要在命令行cuda-gdb中重现此消息,您需要暂停断点,例如在执行"运行"之前,请进行" Break Main"
更新 - 适用于将来有类似问题的人
应用程序的构建如下:
- CUDA内核代码与NVCC编辑,并包括调试信息。例如。NVCC呼叫是:
nvcc -g -G -c mykernel.cu -o mykernel.o
- 此对象文件与GCC编译的其他对象文件链接,而无需生成调试信息-
g++ mycpp1.cpp mycpp2.cpp mykernel.cu -o mycudaapplication
。这导致了一些部分调试信息,这些信息还不足以使CUDA-GDB正确解决这条路径。
Nsight Eclipse Edition默认情况下依靠CUDA-GDB源路径分辨率来查找在调试CUDA应用程序时在编辑器中打开的文件。