1

通常、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))) 

非決定論的有限状態オートマトンの状態と矢印にアクセスするために使用するいくつかのマクロです。

ご協力ありがとうございました!

4

1 に答える 1

1

おそらく、両方の -g を nvcc に渡して、ホスト デバッグでビルドするように設定する必要があります。また、-g3 を -Xcompiler (または --compiler-options) 経由でホスト コンパイラに渡す必要があります。

単なる観察ですが、その SDK メイクファイルを何にも使用するべきではありません。これは本当に悪いことです - 一部の autotools で生成された make ステートメントに対する大雑把な壊れたハックは、不必要に複雑で非常に柔軟性がありません。私が交流している NVIDIA の開発者でさえ、それを使用しないように警告しています。

于 2011-05-15T07:47:10.403 に答える