Go命令行—addr2line

Addr2line 是GNU addr2line 工具的小型模拟,支持 pprof。

注:Addr2line (是标准的 GNU Binutils 中的一部分)是一个可以将指令的地址和可执行映像转换成文件名、函数名和源代码行数的工具。 这种功能将地址转换成更有意义的内容。如果有下面的日志或输出:

08-19 19:08:27.462  2105  2105 I DEBUG   : backtrace:
08-19 19:08:27.462  2105  2105 I DEBUG   :     #00  pc 00042948
08-19 19:08:27.462  2105  2105 I DEBUG   :     #01  pc 0000d158  /system/lib/libc.so
08-19 19:08:27.462  2105  2105 I DEBUG   :     #02  pc 00032954
08-19 19:08:27.462  2105  2105 I DEBUG   :
08-19 19:08:27.462  2105  2105 I DEBUG   : stack:
08-19 19:08:27.462  2105  2105 I DEBUG   :     46d4ddf8  00000000
08-19 19:08:27.462  2105  2105 I DEBUG   :     46d4ddfc  00000020
08-19 19:08:27.462  2105  2105 I DEBUG   :     46d4de00  00000000
08-19 19:08:27.462  2105  2105 I DEBUG   :     46d4de04  00000000
08-19 19:08:27.462  2105  2105 I DEBUG   :     46d4de08  00000000
08-19 19:08:27.462  2105  2105 I DEBUG   :     46d4de0c  46d4de34  [stack:2104]
08-19 19:08:27.462  2105  2105 I DEBUG   :     46d4de10  44c86a04
08-19 19:08:27.462  2105  2105 I DEBUG   :     46d4de14  46d4de60  [stack:2104]
08-19 19:08:27.462  2105  2105 I DEBUG   :     46d4de18  42671490  

通过 add2line 工具解析具体出错代码的位置,能精确查到问题出现在到哪个文件,哪一行。

在Go中以如下方式调用:

go tool addr2line binary

Addr2line从标准输入中,读取每行十六进制地址和带有0x前缀的内容(可选)。对于每个输入地址,addr2line将打印两条输出行,首先是包含地址的函数名称,另一行是对应于该地址的源代码文件,以"文件名:对应行数"的形式显示。

此工具仅供pprof使用;其接口可能会更修改,也可能在未来的版本中完全删除。