我有一个精简应用程序,它看起来像这样产生的堆栈跟踪:使用gdb进行地址转换为线
*** 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
当我在文件中键入命令只是将其从文件,而不是其使用的所有库加载符号。有没有办法做到这一点?
“信息线”命令说:
用于地址没有行号信息0x7f0e442d801d
这我假设是因为该地址在共享库中的一个,但怎么也我知道他们中的哪一个?
['addr2line'](http://linuxcommand.org/man_pages/addr2line1.html)? – 2011-12-17 16:10:27
@ another.anon.coward Year,我试过,但我不知道如何查找哪个文件,因为地址指向共享库。 – Allan 2011-12-17 17:24:07
@Allan:您可以使用'info sharedlibrary'命令来知道哪个共享库的地址为0x7f0e442d801d。 – ks1322 2011-12-17 19:00:57