linux手册翻译 addr2line
名称
addr2line
将地址转换为文件名和代码行数
简介
addr2line [-a|--addresses]
[-b bfdname|--target=bfdname]
[-C|--demangle[=style]]
[-r|--no-recurse-limit]
[-R|--recurse-limit]
[-e filename|--exe=filename]
[-f|--functions] [-s|--basename]
[-i|--inlines]
[-p|--pretty-print]
[-j|--section=name]
[-H|--help] [-V|--version]
[addr addr ...]
描述
addr2line 将地址转换为文件名和代码行数. 给定可执行文件中的地址或可重定位对象的部分中的偏移量,它使用调试信息来找出与它相关联的文件名和行号。
要使用的可执行或可重定位对象使用-e选项指定。默认是文件a.out。使用-j选项指定可重定位对象中要使用的部分。
addr2line 有两种操作模式
第一种, 在命令行上指定十六进制地址,addr2line显示每个地址的文件名和行号。
第二种, addr2line从标准输入中读取十六进制地址,并在标准输出中打印每个地址的文件名和行号。在这种模式下,可以在管道中使用addr2line来转换动态选择的地址。
输出的格式是, 文件名:行号 默认每个输入的地址生成一行输出
两个选项可以在每个 “文件名:行号” 之前生成额外的行.
如果使用了 -a 选项, 会显示带有输入地址的行
如果使用了 -f 选项, 那么带有函数名的行会显示. 这是包含该地址的函数名
一个选项可以在每个 “文件名:行号” 之后生成额外的行.
如果使用了-i选项,由于编译器的内联,在呈现给定地址的代码之后会显示额外的行。对于每个内联函数,将显示一个或两个额外的行(如果使用了-f选项)。
此外, 如果使用-p选项,则每个输入地址生成一个单独的长输出行,其中包含地址、函数名、文件名和行号。如果还使用了-i选项,则任何内联函数将以相同的方式显示,但在单独的行上,并以文本作为前缀(内联)。
如果不能确定文件名或函数名,addr2line将在它们的位置打印两个问号。如果不能确定行号,addr2line将打印0。
选项
这里作为备选项显示的长格式和短格式的选项是等效的。
-a
--addresses
在函数名、文件和行号信息前显示地址。地址用0x前缀打印,方便识别。
-b bfdname
--target=bfdname
指定目标文件的对象代码格式为bfdname。
-C
--demangle[=style]
解码(demangle)低级符号名称为用户级名称。除了删除系统附加的任何初始下划线外,这还使c++函数名具有可读性。不同的编译器有不同的混杂风格。可选的demangling style参数可用于为编译器选择适当的demangling样式。
(译者注: C++编译时,编译后的函数符号名和代码中的函数名并不完全一致(因为C++函数重载, 函数名是一样的, 但编译后的函数名必须要唯一,所以C++会对函数名进行修饰), 这里-C参数的作用就是去掉编译器的修饰, 方便用户可读的方式呈现函数名)
-e filename
--exe filename
指定地址要被翻译的可执行文件的名字, 默认是 a.out
-f
--functions
显示函数名和文件行号信息
-s
--basenames
只显示每个文件名的base (即不显示文件的具体路径,只显示文件名)
-i
--inlines
如果地址属于一个内联函数,则返回到第一个非内联函数的所有封闭作用域的源信息也将被打印出来。例如,如果"main"内联"callee1",而"callee1"内联"callee2",并且address来自"callee2",则"callee1"和"main"的源信息也将被打印出来。
-j
--sections
读取相对于 section 的偏移地址而不是绝对地址
-p
--pretty-print
使输出更人性化:每个位置都打印在一行上。如果指定了option -i,则所有封闭范围的行都以(内联)作为前缀。
-r
-R
--recurse-limit
--no-recurse-limit
--recursion-limit
--no-recursion-limit
启用或禁用在分解字符串时执行的递归数量限制。由于名称修饰格式允许无限级别的递归,因此有可能创建字符串,其解码将耗尽主机上可用的堆栈空间,从而触发内存故障。该限制试图通过将递归限制为2048个嵌套级别来防止这种情况发生。
默认情况下,该限制是启用的,但为了处理真正复杂的名称,可能需要禁用它。但是请注意,如果禁用递归限制,则堆栈耗尽是可能的,并且任何关于此类事件的错误报告都将被拒绝。
-r 参数表示 --no-recurse-limit 选项; -R参数表示 --recursion-limit 选项.
注意, 这个选项仅在 -C 或 --demangle 参数启用时生效.
@file
从文件中读取命令行选项。选项read被插入到原来的@file选项的位置。如果文件不存在,或者无法读取,那么该选项将被按字面处理,而不会被删除。
file中的选项以空格分隔。通过将整个选项用单引号或双引号括起来,可以将空白字符包含在选项中。任何字符(包括反斜杠)都可以通过在要包含的字符前加上反斜杠来包含。文件本身可能包含额外的@file选项;任何这样的选项都将被递归地处理。
SEE ALSO
binutils的信息条目。
版权
版权所有© 1991-2022自由软件基金会,Inc。
在GNU自由文档许可证1.3版或自由软件基金会发布的任何更新版本的条款下,被授予复制、分发和/或修改本文档的许可;没有固定章节,没有封面文本,也没有封底文本。该许可证的副本包含在题为“GNU自由文档许可证”的部分中。
binutils-2.38 2023-06-04 ADDR2LINE(1)