我试图阻止 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 错误。