使用内联函数的gdb

时间:2009-02-13 15:59:38

标签: debugging gdb

我正在尝试在事后模式中使用gdb与崩溃进程的核心转储。我可以得到一个堆栈跟踪,但gdb不是向我显示违规函数中的实际位置,而是向我显示违规函数调用的两行内联函数的行号。

内联函数被称为很多很多地方;如何找到触发崩溃的呼叫?如何在内联函数周围找到代码?

3 个答案:

答案 0 :(得分:2)

我认为“对内联函数的许多调用”都是在一个“违规函数”中发生的(否则你的问题对我来说没有意义)。

最好的办法是在GDB中记下崩溃点的IP地址,然后使用"objdump -dS ./a.out"并在输出中找到该IP。

答案 1 :(得分:2)

转到相关的堆栈帧,打印指令点(例如p $ rip), 然后使用它来手动查找它,例如“addr2line -e -i 0x84564756”。

这不会扩展,但至少它可以工作。

答案 2 :(得分:-1)

您可以尝试将OPTIMIZE设置为NO(例如,setenv OPTIMIZE NO)并重建项目:这告诉编译器不要优化代码,因此它可能不会内联函数调用。