2012-10-30 97 views
0

我试图阻止g ++内联模板化函数,这会导致gdb缺少调试信息,比如局部变量甚至当前行号。gcc 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的错误。

+1

船长明显:你用-g?它没有列出你试过的选项 –

+0

是的,我使用-ggdb这显然确保我有gdb的调试信息...这里是我的编译选项: 'g ++ -c -DDEBUG -O0 -fno- inline -fno-implicit-inline-templates -Wno-deprecated -ggdb -Wall -fPIC -MD -msse2' – BenMercs

回答

1

我建议使用-g3符号来获取详细的调试信息。这将产生完整的代码级别信息,可用于调试流程。