0

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のバグのようです。

4

1 に答える 1

1

-g3 シンボルを使用して詳細なデバッグ情報を取得することをお勧めします。これにより、フローのデバッグに使用できる完全なコード レベルの情報が生成されます。

于 2012-11-06T06:14:07.110 に答える