addr2line命令用于调试符号的搜索路径

时间:2018-03-26 20:00:21

标签: c ubuntu addr2line

我无法使 addr2line 工作。它确实在三条(未存在的)路径上寻找符号:

/usr/bin/*.debug
/usr/bin/.debug/*.debug
/usr/lib/debug/usr/bin/*.debug

但它似乎忽略了默认情况下实际安装所有调试符号的路径:

/usr/lib/debug/.build-id/

我像这样运行* addr2line **:

addr2line -f -C -e <PathToExecFile> <Addr>

我是否遗漏了一些配置开关,系统选项或类似内容?

这是问题陈述,现在是我所说的一些证明。 在这里,我将使用程序 screen 作为示例:

$ sudo apt-get install screen screen-dbg
$ file /usr/bin/screen
> /usr/bin/screen: setgid ELF 64-bit LSB executable, x86-64, version 1 (SYSV),
  dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32,
  BuildID[sha1]=e9d3cd5073daa6b7365b3787673143edeec589d3, stripped
$ dpkg -L screen-dbg
> /usr/lib/debug/.build-id/e9/d3cd5073daa6b7365b3787673143edeec589d3.debug

在这里,我们凭经验找出了 screen 的调试符号的位置:

/usr/lib/debug/.build-id/e9/d3cd5073daa6b7365b3787673143edeec589d3.debug

现在我们运行 strace addr2line 以查看它尝试访问的位置......

# Get any valid object address
$ objdump -T /usr/bin/screen
> 00000000006697e0

# Use the object address in addr2line
$ strace -f addr2line -f -C \
    -e /usr/bin/screen 0x00000000006697e0 2>&1 | grep debug
> open("/usr/bin/d3cd5073daa6b7365b3787673143edeec589d3.debug", O_RDONLY) = -1 ENOENT (No such file or directory)
  open("/usr/bin/.debug/d3cd5073daa6b7365b3787673143edeec589d3.debug", O_RDONLY) = -1 ENOENT (No such file or directory)
  open("/usr/lib/debug/usr/bin/d3cd5073daa6b7365b3787673143edeec589d3.debug", O_RDONLY) = -1 ENOENT (No such file or directory)

在这里,我们看到前面提到的3条路径,但没有所需的路径。

0 个答案:

没有答案