Debugging 如何将cuda gdb与g++;使用nvcc编译的静态库的链接程序?

Debugging 如何将cuda gdb与g++;使用nvcc编译的静态库的链接程序?,debugging,cuda,g++,nvcc,cuda-gdb,Debugging,Cuda,G++,Nvcc,Cuda Gdb,我正在为一个g++链接项目开发一个nvcc编译的静态库。如何在最终可执行文件上使用cuda gdb?我得到的只是“程序正常退出”,没有任何printf输出或任何东西 在编译静态库时,nvcc肯定被赋予了-g-g参数 这是我的命令行缓冲区: cuda-gdb /home/sean/cuda-workspace/cudasplat/Debug/cudasplat NVIDIA (R) CUDA Debugger 5.0 release Portions Copyright (C) 2007-201

我正在为一个g++链接项目开发一个nvcc编译的静态库。如何在最终可执行文件上使用cuda gdb?我得到的只是“程序正常退出”,没有任何printf输出或任何东西

在编译静态库时,nvcc肯定被赋予了-g-g参数

这是我的命令行缓冲区:

cuda-gdb /home/sean/cuda-workspace/cudasplat/Debug/cudasplat 
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/sean/cuda-workspace/cudasplat/Debug/cudasplat...done.
(cuda-gdb) set args -t a1-31 a2-31 a3-31 a4-31 -L 30 -o tx_coverage -d /var/www/userman/plot-temp/ -db -85 -ngs -dbm -R 20
(cuda-gdb) run
Starting program: /home/sean/cuda-workspace/cudasplat/Debug/cudasplat -t a1-31 a2-31 a3-31 a4-31 -L 30 -o tx_coverage -d /var/www/userman/plot-temp/ -db -85 -ngs -dbm -R 20
[Thread debugging using libthread_db enabled]
Exiting...

Program exited normally.
(cuda-gdb)
  • 您应该在发出run命令之前设置断点
  • 应用程序是否执行正确的错误检查?请注意,cuda gdb可能“隐藏”用于呈现操作系统图形界面的GPU。例如,如果您只有一个GPU系统,并且在窗口环境(如GTK或KDE)中从CUDA gdb运行CUDA应用程序,则应用程序可能会失败,因为不会检测到GPU

  • 你的程序正常退出。您在调试器中发出了run命令,因此它一直运行到遇到断点(您没有设置任何断点)或程序终止。我猜你的问题是关于程序输出的?与cuda gdb中的set args命令相比,在命令行上运行时是否传递了相同的参数?(这些参数中有没有重定向输出?)另一种可能性是,在调试情况下,程序在输出任何内容之前正在经历终止。也许在main上设置一个断点,然后单步执行第一个格式化的输出,看看会发生什么。当我在应该基于参数调用的函数上设置断点时,如果这些断点都没有命中,我不确定那里发生了什么。当我用一个需要2个参数的简单程序启动cuda gdb时,如果我设置args 10 10,我会得到预期的结果,同样,如果我不设置参数,我会打印出预期的错误消息。由于您甚至还没有收到欢迎使用CUDASPLAT的消息(可能是在代码的早期?),所以您可以单步执行,而不是设置断点。对于正在发生的事情,您可能会得到更好的线索。应用程序是否会因为在窗口管理器中运行而在常规运行时失败?可能不会。如果像deviceQuery这样的工具可以“看到”GPU,那么对于应用程序的普通(非gdb)运行,任何其他程序都应该没有问题。我在运行Gnome的RHEL6.2笔记本电脑上运行CUDAGDB,在GUI中的终端会话中,它似乎可以正常工作。然而,在这个单一的GPU场景中,在设备代码中设置断点时要小心,它们可能会挂起GUI。对于这些情况,我使用不同的方法,在这里我使用非英伟达GPU来显示(即X),并将Nvidia CUDA GPU排除在X之外。我做了一些挖掘,你说的对,这就是我所面临的问题。看来我要浪费一天的时间来获取第二张视频卡:\n另一种方法是将机器设置为运行级别3,并将ssh插入其中,假设您尝试调试的应用程序不使用X。@Sean注意,还有一个看门狗计时器的问题-如果您的内核需要很长时间才能完成,如果在用于驱动显示器的设备上运行,它们可能会提前终止。我不知道确切的超时时间-它是几秒钟。
    /home/sean/cuda-workspace/cudasplat/Debug/cudasplat -t  a1-31 a2-31 a3-31 a4-31 -L 30 -o tx_coverage -d /var/www/userman/plot-temp/ -db -85 -ngs -dbm -R 20
                --==[ Welcome To CUDASPLAT! HD v1.4.0a ]==--
    
    Loading "51:52:113:114-hd.sdf" into page 1... Done!
    Loading "50:51:113:114-hd.sdf" into page 2... Done!
    Loading "50:51:114:115-hd.sdf" into page 3... Done!
    Loading "51:52:114:115-hd.sdf" into page 4... Done!
    copying 444 mb into device memory (3878 mb free)
    finished copy
    min_north 50, max_north 52, min_west 113, max_west 115
    allocated antenna memory
    invalid argument in ../cudapath.cu at line 551