通常使用 gcc,您可以使用 -g 指定调试信息的级别,如果使用 -g3,它将在可执行文件中包含预处理器宏定义,gdb 等调试器可以读取并允许您在调试期间使用。我想用 nvcc 来调试 CUDA 程序。
我目前正在修改 SDK 中的模板程序,因此我使用的是 Makefile 中包含的默认 Makefile 和 common.mk。在 'ifeq ($(dbg), 1)' 块中的 common.mk 中,我尝试了以下方法:
- 将 -g3 放在 COMMONFLAGS 下
- 将 -g3 放在 NVCCFLAGS 下
- 将 -g3 放在 CXXFLAGS 和 CFLAGS 下
- 将 --compiler-options -g3 放在 NVCCFLAGS 下。
前两个给出了一个无法识别的选项错误。后两个似乎不起作用,因为当我使用 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)))
是我用来访问非确定性有限状态自动机的状态和箭头的一些宏。
谢谢您的帮助!