I'm working in GDB on S390x

I have a function that essentially does this:

Item *getItemFromRef( PrimaryDataStructure pds, size_t ref ) {
    Item *returnValue = NULL;
    SecondaryDataStructure sds = getSecondaryFromPrimary(pds, ref)
    if (sds) {
        returnValue = getItemFromRefSecondary(sds, ref);
    }
    return returnValue;
}

I've set breakpoints on getItemFromRef and getItemFromRefSecondary. The getItemFromRef breakpoint fires fine, but the getItemFromRefSecondary never fires. Is this expected? Is there any way to get it to fire? What am I doing wrong? This behavior occurs even if I disable the breakpoint for getItemFromRef.

EDIT: Using gdb 6.8.50

有帮助吗?

解决方案

I took another look at the symbols today and discovered that two different dynamic libraries were importing the same function symbol and that the break point was being set to the wrong version of the function.

其他提示

Is it possible that getItemFromRefSecondary got inlined at that point? It may report the inlined function name when you step into it (due to debug information) but the debugger can only break if it's truly a function call.

You can compile with less optimization (or none, with -O0) or if that's too intrusive you can force the function to not inline with __attribute__((__noinline__)) (assuming you build with gcc).

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top