从C++核心转储中推断源行号

woo*_*tok 1 c++ linux compiler-construction gcc

我有一个剥离的linux系统,我必须在另一个系统上交叉编译我需要的所有应用程序.这些应用程序通常是核心,我从中得到的唯一信息是核心和指令偏移的功能.如果我没有其他选项,我会对可执行文件执行objdump,并尝试从指令偏移量和汇编代码段中猜测源代码.这是我的生活.

注意:应用程序使用g ++进行交叉编译并被删除.所以gdb对我帮助不大

问题:由于编译器/ gcc已将源代码行转换为汇编指令,是否会有一些选项可以在指令偏移量与行之间产生相关性?

kel*_*tar 5

创建构建-g,然后从中获取符号映射.把它保存到某个地方(我建议用调试符号保存二进制文件 - 这样更容易),然后将调试符号(用strip程序)去掉并将生成的二进制文件部署到目标系统.以下是如何:https://sourceware.org/gdb/onlinedocs/gdb/Separate-Debug-Files.html

崩溃后,使用-g-compiled二进制文件或使用发布二进制文件和单独的调试文件来恢复转储.如果你有崩溃地址和带有调试符号的二进制文件,并且你想将它映射到源代码行 - 你可以使用addr2line -e your_binary crash_address而不是gdb.