我在S390x的GDB中工作。
我有一个函数,它基本上可以做到这一点:
Item *getItemFromRef( PrimaryDataStructure pds, size_t ref ) {
Item *returnValue = NULL;
SecondaryDataStructure sds = getSecondaryFromPrimary(pds, ref)
if (sds) {
returnValue = getItemFromRefSecondary(sds, ref);
}
return returnValue;
}我已经在getItemFromRef和getItemFromRefSecondary上设置了断点。getItemFromRef断点可以正常触发,但getItemFromRefSecondary从不触发。这是意料之中的吗?有没有办法让它着火?我做错了什么?即使我禁用了getItemFromRef的断点,也会发生这种情况。
编辑:使用gdb 6.8.50
发布于 2012-09-28 04:16:33
我今天再次查看了符号,发现两个不同的动态库正在导入相同的函数符号,并且断点被设置为错误的函数版本。
发布于 2012-09-27 07:35:57
有没有可能getItemFromRefSecondary在那个时候被内联了呢?当您进入调试器时(由于调试信息),它可能会报告内联函数名,但只有当它是真正的函数调用时,调试器才会中断。
您可以使用较少的优化进行编译(或者使用-O0不进行优化),或者如果这样做太具侵入性,您可以强制函数不内联__attribute__((__noinline__)) (假设您使用gcc构建)。
https://stackoverflow.com/questions/12611978
复制相似问题