g ++がテンプレート化された関数をインライン化しないようにしようとしています。これにより、gdbにローカル変数や現在の行番号などのデバッグ情報が不足します。
実際、これはテンプレート関数のインライン化に関連していると思います。これは、コールスタック内の何にもアクセスできない唯一の状況だからです。
私は、次のようなg++オプションでできることをほぼすべて試しました。
-DDEBUG -O0 -fno-inline -fno-implicit-inline-templates
また、関数の前に__attribute __((noinline))を付けても効果がないことを考慮しました。
私のコールスタックは次のようになります
#0 CVector<CGatherColor>::operator[] (this=0x9324480, index=1208) at ../utils/vector.h:28
#1 0x0000000000ee1d27 in unsigned int CBrdfLoop::trace_t<CAreaLightSquare, CNoCulling, CAreaLightSquare, CBrdfLdSampler>(int, unsigned int, CPrimMBVH*, CVector<CBrdfCache::CVertexCache>*, CAreaLightSquare&, CNoCulling&, CAreaLightSquare&, CBrdfLoop::CVtxSmpInfo const&, CBrdfLdSampler&) ()
#2 0x0000000000eb52ac in void CBrdfLoop::illuminate_t<CAreaLightSquare, CAreaLightSquare, CBrdfLdSampler>(unsigned int, CBrdfLdSampler&, CVector<CBrdfCache::CVertexCache>*, CAreaLightSquare&, CAreaLightSquare&, unsigned int, CPrimMBVH*) ()
行番号もデバッグ情報もありません。g ++ 4.4.5でコンパイルし、GNU gdb(GDB)Fedora(7.1-34.fc13)でデバッグしています。
私は非常に行き詰まっていて、デバッグは非常に難しく、printf以外のオプションはありません...これは私が使用しているバージョンの既知の問題ですか?私にできることはありますか?
更新:gcc / gdbの最新バージョンでは、問題ありません。gcc/gdbのバグのようです。