我有一个被剥离的应用程序生成的堆栈跟踪,它看起来像这样:
*** Check failure stack trace: ***
@ 0x7f0e442d392d (unknown)
@ 0x7f0e442d7b1f (unknown)
@ 0x7f0e442d7067 (unknown)
@ 0x7f0e442d801d (unknown)
@ 0x7f0e457c55e6 (unknown)
@ 0x7f0e457c5696 (unknown)
@ 0x4e8765 (unknown)
@ 0x4a8b43 (unknown)
@ 0x7f0e43197ced (unknown)
@ 0x4a6889 (unknown)
我有一个未剥离符号的可执行文件以及它的所有库(使用调试信息编译)。但是如何将地址转换为文件和行号呢?
这是我尝试过的方法:
gdb
set solib-absolute-prefix /path/to/non-stripped/edition/of/root/filesystem/sysroot/
file /path/to/non-stripped/edition/of/root/filesystem/sysroot/usr/bin/my-buggy-app
info line *0x7f0e457c5696
当我输入文件命令时,它只加载文件中使用的符号,而不是所有使用的库。有没有方法可以做到这一点?
"info line" 命令显示:
地址 0x7f0e442d801d 没有可用的行号信息
我想这是因为该地址在其中一个共享库中,但是如何知道是哪个库?
addr2line
是一个命令行工具,用于将程序的地址转换为源代码文件名和行号。它在调试崩溃或其他类似问题时非常有用。 - another.anon.cowardadd-symbol-file 文件名 地址
可能有助于从共享库(一次一个)加载符号。http://www.delorie.com/gnu/docs/gdb/gdb_125.html - thomasa88sharedlibrary
中没有符号,而且list 0xaddress
没有显示任何源代码。我运行了add-symbol-file file addr
,然后list 0xaddress
就显示了源代码。 - thomasa88