我在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
答案 0 :(得分:1)
我今天又看了一下符号,发现两个不同的动态库正在导入相同的函数符号,并且断点被设置为函数的错误版本。
答案 1 :(得分:0)
那时getItemFromRefSecondary
是否有可能被内联?当您进入它时,它可能会报告内联函数名称(由于调试信息),但调试器只有在它真正是函数调用时才会中断。
您可以使用较少的优化进行编译(或者使用-O0
进行编译),或者如果进行过于干扰,则可以强制该函数不与__attribute__((__noinline__))
内联(假设您使用gcc
构建)