Debugging 将gdb与内联函数一起使用

Debugging 将gdb与内联函数一起使用,debugging,gdb,Debugging,Gdb,我试图在死后模式下使用gdb,将崩溃进程的核心转储。我可以获得堆栈跟踪,但不是显示出错函数中的实际位置,gdb显示出错函数调用的两行内联函数的行号 内联函数被称为很多很多地方;我如何找到是哪个电话触发了崩溃?如何在内联函数周围立即找到代码?您可以尝试将OPTIMIZE设置为NO(例如setenv OPTIMIZE NO)并重建项目:这告诉编译器不要优化代码,因此它可能不会内联函数调用。我假设“对内联函数的许多调用”都是在一个单独的函数中发生的“冒犯功能”(否则你的问题对我来说没有意义) 最好的办

我试图在死后模式下使用
gdb
,将崩溃进程的核心转储。我可以获得堆栈跟踪,但不是显示出错函数中的实际位置,
gdb
显示出错函数调用的两行内联函数的行号


内联函数被称为很多很多地方;我如何找到是哪个电话触发了崩溃?如何在内联函数周围立即找到代码?

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

我假设“对内联函数的许多调用”都是在一个单独的函数中发生的“冒犯功能”(否则你的问题对我来说没有意义)


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

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


这无法扩展,但至少它可以工作。

谢谢,但我真的希望能够对优化(发布)版本进行后期分析,以便我们能够分析客户的核心转储。