1.14 UNIX调试方法
1.14.1 NVIDIA cuda-gdb调试器(1)
若要使用CUDA调试器cuda-gdb,在使用nvcc进行源代码编译时就必须加入-g -G命令行参数。其中,-g表示主机代码编译为可调试版本;-G表示GPU代码编译为可调试版本(如例1.16所示)。
例1.16 编译程序为cuda-gdb可调试版本的nvcc命令
![]() |
下面是一些常用的调试命令列表(括号内给出了单字母缩写形式),以及各命令的简要介绍。
breakpoint(b):设置断点,使代码在指定位置暂停执行。其参数可以是方法名,也可以是行号。
run(r):在调试器内执行程序。
next(n):单步执行到下一行代码。
continue(c):继续执行已暂停的程序至下一个断点或程序结尾处。
backtrace(bt):显示当前方法调用的栈中的内容。
thread:列出当前的主机线程。
cuda thread:列出当前活跃的GPU线程(若有的话)。
cuda kernel:列出当前活跃的GPU Kernel,并允许将“焦点”转移到指定的GPU线程。
使用cuda-gdb命令启动调试器,如例1.17所示。
例1.17 cuda-gdb启动界面
![]() |
使用“l”命令显示fill的源代码,如例1.18所示。
例1.18 cuda-gdb列出源代码
![]() |
在源代码第12行处设置断点,并执行程序。我们会看到Thrust Kernel执行,然后程序会命中fillKernel()中的断点,如例1.19所示。
例1.19 cuda-gdb设置断点
![]() |
打印线程编号tid的值,如例1.20所示。
例1.20 cuda-gdb打印变量值
![]() |
切换到第403号线程,再次打印tid的值。tid的值仍会正确输出,如例1.21所示。
例1.21 cuda-gdb切换线程并打印变量值
![]() |
退出cuda-gdb(如例1.22所示)。
例1.22 退出cuda-gdb
![]() |