通常、gcc では -g でデバッグ情報のレベルを指定できます。-g3 を使用すると、gdb などのデバッガーが読み取ってデバッグ中に使用できる実行可能ファイルにプリプロセッサ マクロ定義が含まれます。CUDA プログラムをデバッグするために nvcc でこれを行いたいと思います。
現在、SDK のテンプレート プログラムを変更して作業しているため、デフォルトの Makefile と Makefile に含まれる common.mk を使用しています。「ifeq ($(dbg), 1)」ブロック内の common.mk で、次のことを試しました。
- -g3 を COMMONFLAGS の下に置く
- -g3 を NVCCFLAGS の下に置く
- -g3 を CXXFLAGS と CFLAGS の下に置く
- --compiler-options -g3 を NVCCFLAGS の下に配置します。
最初の 2 つは、認識できないオプション エラーを示します。cuda-gdb を使用してデバッグすると、マクロ情報が得られないため、2 番目の 2 つはうまくいかないようです。
これを行う理由は、プログラム自体がそのメモリにアクセスするために使用するのと同じマクロを使用して、一部のメモリを検査したいからです。例えば、
#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)))
非決定論的有限状態オートマトンの状態と矢印にアクセスするために使用するいくつかのマクロです。
ご協力ありがとうございました!