addr2line с архивными файлами - PullRequest
       27

addr2line с архивными файлами

0 голосов
/ 13 октября 2019

Я пытаюсь использовать addr2line с архивным файлом libdpdk.a

У меня есть обратный след:

backtrace returned: 7
0: 0x46fd05 ./build/ip_pipeline(bt+0x25) [0x46fd05]
1: 0x42a163 ./build/ip_pipeline() [0x42a163]
2: 0x46ff21 ./build/ip_pipeline(rte_eal_init+0x171) [0x46ff21]
3: 0x439629 ./build/ip_pipeline(app_init+0x709) [0x439629]
4: 0x42b3ff ./build/ip_pipeline(main+0x5f) [0x42b3ff]
5: 0x7f101166b830 /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf0) [0x7f101166b830]
6: 0x42d009 ./build/ip_pipeline(_start+0x29) [0x42d009]

Я попробовал следующую команду:

addr2line  0x46fd05 -f -e ../../build/lib/librte_eal.a

addr2line: ../../build/lib/librte_eal.a: cannot get addresses from archive

Ожидаемый вывод должен быть именем функции в обратной трассировке по адресу 0x46fd05 или 0x46fd05 в зависимости от того, какой адрес я передаю. На данный момент нет имени символа, связанного с этим адресом.

Любые предложения.

Я скомпилировал код, используя -rdynamic

1 Ответ

1 голос
/ 16 октября 2019

Если указать причину выбора .a / .so, 'addr2line' должен использоваться с исполняемым двоичным файлом. Причина в том, что адреса обратной трассировки являются специфическими для двоичного файла.

Одна и та же статическая (.a) библиотека обычно загружается по разным адресам в разных двоичных файлах. Это верно для '.so' (особенно для позиционно-независимого кода), но во многих случаях Linux пытается повторно использовать уже отображенные файлы '.so', так что фактические адреса совпадают.

Нижняя строка - из man-страницы - используйте имя исполняемого файла.

--exe=filename
           Specify the name of the executable for which addresses should be translated. 
           The default file is a.out.

Некоторые практические замечания - при использовании .so - вы хотите выполнить addr2line в системе, которая имеет такие же исполняемые, общие объектыи LD_LIBRARY_PATH. Если в вашей разработке и на производстве есть разные «.so», адреса могут не совпадать.

...