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”
这无法扩展,但至少它可以工作。谢谢,但我真的希望能够对优化(发布)版本进行后期分析,以便我们能够分析客户的核心转储。