s390x上的断点

时间:2012-09-26 23:31:00

标签: c linux gdb mainframe

我在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;
}

我在getItemFromRefgetItemFromRefSecondary设置了断点。 getItemFromRef断点触发正常,但getItemFromRefSecondary从不触发。这是预期的吗?有没有办法让它开火?我究竟做错了什么?即使我禁用getItemFromRef的断点,也会出现此问题。

编辑:使用gdb 6.8.50

2 个答案:

答案 0 :(得分:1)

我今天又看了一下符号,发现两个不同的动态库正在导入相同的函数符号,并且断点被设置为函数的错误版本。

答案 1 :(得分:0)

那时getItemFromRefSecondary是否有可能被内联?当您进入它时,它可能会报告内联函数名称(由于调试信息),但调试器只有在它真正是函数调用时才会中断。

您可以使用较少的优化进行编译(或者使用-O0进行编译),或者如果进行过于干扰,则可以强制该函数不与__attribute__((__noinline__))内联(假设您使用gcc构建)