1

我在 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和上设置了断点getItemFromRefSecondarygetItemFromRef断点触发良好,但从不getItemFromRefSecondary触发。这是预期的吗?有什么办法让它着火吗?我究竟做错了什么?即使我禁用getItemFromRef.

编辑:使用 gdb 6.8.50

4

2 回答 2

1

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

于 2012-09-27T20:16:33.497 回答
0

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

您可以使用较少的优化(或没有,使用-O0)进行编译,或者如果这太侵入性,您可以强制该函数不内联__attribute__((__noinline__))(假设您使用 构建gcc)。

于 2012-09-26T23:35:56.920 回答