Не могу заставить работать 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>
Мне не хватает какого-то переключателя конфигурации, системной опции или чего-то подобного?
Это была постановка вопроса, а теперь несколько доказательств того, что я говорю. Здесь я буду использовать программу экран в качестве примера:
$ 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
Здесь мы эмпирически выяснили, где находятся отладочные символы для экран:
/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 пути, о которых я упоминал ранее, но никаких признаков желаемого.





Добавлен отчет об ошибке в Ubuntu: bugs.launchpad.net/ubuntu/+source/binutils/+bug/1759248