通常使用gcc,您可以使用-g指定调试信息的级别,如果使用-g3,它将在可执行文件中包含预处理程序宏定义,调试程序(如gdb)可以读取并允许您在调试期间使用。我想用nvcc来调试CUDA程序。
我目前正在修改SDK中的模板程序,因此我使用Makefile中包含的默认Makefile和common.mk。在'ifeq($(dbg),1)'块中的common.mk中,我尝试了以下内容:
前两个给出了无法识别的选项错误。第二个似乎没有这个技巧,因为当我使用cuda-gdb调试时,我没有得到宏信息。
我想这样做的原因是因为我想使用程序本身用来访问该内存的相同宏来检查一些内存。例如,
#define ARROW(state, arrow) ((c_arrow_t *)(&((state)->arrows) + (arrow) * sizeof(c_arrow_t)))
#define STATE(nfa, state) ((c_state_t *)(&((nfa)->states) + (state) * sizeof(c_state_t)))
是我用来访问非确定性有限状态自动机的状态和箭头的一些宏。
感谢您的帮助!
答案 0 :(得分:1)
您可能需要将-g传递给nvcc以将其设置为使用主机调试进行构建,并且还通过-Xcompiler(或--compiler-options)将-g3传递给主机编译器
只是观察,但你真的不应该使用SDK makefile来做任何事情。这真的很邪恶 - 一些autotools上的粗暴破解产生了make语句,这既不必要地复杂又非常不灵活。甚至我与之互动的NVIDIA开发人员都警告不要使用它。