用 Addr2line 将函数地址解析为函数名
2013-05-03 15:39
148 查看
Addr2line 工具(它是标准的 GNU Binutils 中的一部分)是一个可以将指令的地址和可执行映像转换成文件名、函数名和源代码行数的工具。这种功能对于将跟踪地址转换成更有意义的内容来说简直是太棒了。
要了解这个过程是怎样工作的,我们可以试验一个简单的交互式的例子。(我直接从 shell 中进行操作,因为这是最简单地展示这个过程的方法,如清单 4 所示。)这个示例 C 文件(test.c)是通过
Addr2line 工具,就可以判断出函数名(
在调用 Addr2line 工具时,要使用
要了解这个过程是怎样工作的,我们可以试验一个简单的交互式的例子。(我直接从 shell 中进行操作,因为这是最简单地展示这个过程的方法,如清单 4 所示。)这个示例 C 文件(test.c)是通过
cat一个简单的应用程序实现的(也就是说,将标准输出的文本重定向到一个文件中)。然后使用 gcc 来编译这个文件,它会传递一些特殊的选项。首先,要(使用
-Wl选项)通知链接器生成一个映像文件,并(使用
-g选项)通知编译器生成调试符号。最终生成可执行文件 test。得到新的可执行应用程序之后,您就可以使用
grep工具在映像文件中查找
main来寻找它的地址了。使用这个地址和
Addr2line 工具,就可以判断出函数名(
main)、源文件(/home/mtj/test/test.c)以及它在源文件中的行号(4)。
在调用 Addr2line 工具时,要使用
-e选项来指定可执行映像是
test。通过使用
-f选项,可以告诉工具输出函数名。
$ cat >> test.c #include <stdio.h> int main() { printf("Hello World\n"); return 0; } <ctld-d> $ gcc -Wl,-Map=test.map -g -o test test.c $ grep main test.map 0x08048258 __libc_start_main@@GLIBC_2.0 0x08048258 main $ addr2line 0x08048258 -e test -f main /home/mtj/test/test.c:4 $ |
相关文章推荐
- 用 Addr2line 将函数地址解析为函数名
- 使用 Addr2line 将函数地址解析为函数名
- 使用 Addr2line 将函数地址解析为函数名
- 用 Addr2line 将函数地址解析为函数名
- 用 Addr2line 将函数地址解析为函数名
- 使用 Addr2line 将函数地址解析为函数名
- 用 Addr2line 将函数地址解析为函数名
- 使用 Addr2line 将函数地址解析为函数名
- 使用 Addr2line 将函数地址解析为函数名
- 使用 Addr2line 将函数地址解析为函数名
- socket地址解析相关的几个函数inet_addr,inet_ntoa,gethostname,gethostbyname
- 5.7.3 用extract_addr函数解析邮件地址
- 5.4 extract_addr函数:邮件地址解析
- shell解析addr2line文件
- C++ 虚函数表解析(比较清楚,还可打印虚函数地址)
- ACE_INET_Addr地址类浅解析
- 为函数添加enter和exit级tracem,并适配addr2line的实现
- Android NDK使用addr2line符号化得到错误函数名的问题
- 网络地址转换相关函数使用(inet_addr,inet_ntoa,inet_addr)
- 获取函数的地址(三种方法,分别是@,Addr,MethodAddress)