我正在尝试防止g 插入模板的函数,这会导致GDB缺乏调试信息,例如本地变量甚至当前行号。
实际上,我猜这是与内部模板函数有关的事情,因为这是唯一无法访问Callstack中任何内容的情况。
我几乎尝试了我在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错误。
我建议使用-g3符号获取详细的调试信息。这将产生完整的代码级信息,可用于调试流程。