1、命令简介
addr2line命令将地址翻译成文件名和行号。 给出一个可执行文件中的地址或一个可重定位对象中的偏移部分的地址,它使用调试信息来找出与之相关的文件名和行号。
2、命令用法
addr2line [参数] [地址]
3、命令描述
addr2line
将地址转换为文件名和行号。给定可执行文件中的一个地址或可重定位对象的一个部分中的偏移量,它使用调试信息来确定与它相关联的文件名和行号。
使用-e
选项指定要使用的可执行或可重定位对象。默认是文件a.out
。可重定位对象中要使用的部分是用-j
选项指定的。
addr2line
有两种操作方式:
1)命令行中指定的十六进制地址,addr2line
显示每个地址的文件名和行号。
2)addr2line
从标准输入读取十六进制地址,并在标准输出上打印每个地址的文件名和行号。在这种模式下,可以在管道中使用addr2line
来转换动态选择的地址。
输出格式为FILENAME:LINENO
。每个地址的文件名和行号被打印在单独的一行上。如果使用-f
选项,则每个FILENAME:LINENO
行之前都有一个FUNCTIONNAME
行,这是包含地址的函数的名称。
如果无法确定文件名或函数名,addr2line
将在其位置打印两个问号。如果不能确定行号,addr2line
将输出0
。
4、命令选项
-a | 在函数名、文件和行号信息之前,显示地址,以十六进制形式 |
-b | 指定目标文件的格式为bfdname |
-e | 指定需要转换地址的可执行文件名 |
-j | 给出的地址代表指定section的偏移,而非绝对地址 |
-C | 将低级别的符号名解码为用户级别的名字 |
-f | 在显示文件名、行号输出信息的同时显示函数名信息 |
-p | 使得该函数的输出信息更加人性化:每一个地址的信息占一行 |
5、使用示例
使用-f和-e参数,在显示文件名、行号输出信息的同时显示函数名信息:
# addr2line -f -e /to/path/libvitae.so
使用-a参数,在函数名、文件和行号信息之前,显示地址,以十六进制形式:
# addr2line -a cjavapy
使用addr2line的一些参数来定位代码:
# addr2line 0x00000000004004a3 -e test -f -C -s