j1e*_*elo 7 c ubuntu addr2line
我无法使addr2line工作。它确实在三个(不存在的)路径上查找符号:
/usr/bin/*.debug
/usr/bin/.debug/*.debug
/usr/lib/debug/usr/bin/*.debug
Run Code Online (Sandbox Code Playgroud)
但它似乎忽略了默认情况下实际安装所有调试符号的路径:
/usr/lib/debug/.build-id/
Run Code Online (Sandbox Code Playgroud)
我像这样运行 *addr2line** :
addr2line -f -C -e <PathToExecFile> <Addr>
Run Code Online (Sandbox Code Playgroud)
我是否缺少一些配置开关、系统选项或类似的东西?
这是问题陈述,现在是我所说内容的一些证据。在这里,我将使用程序屏幕作为示例:
$ 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
Run Code Online (Sandbox Code Playgroud)
这里我们凭经验找到了屏幕的调试符号在哪里:
/usr/lib/debug/.build-id/e9/d3cd5073daa6b7365b3787673143edeec589d3.debug
Run Code Online (Sandbox Code Playgroud)
现在我们运行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)
Run Code Online (Sandbox Code Playgroud)
在这里,我们看到了我之前提到的 3 条路径,但没有看到所需路径的迹象。
归档时间: |
|
查看次数: |
2270 次 |
最近记录: |