首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有存档文件的addr2line

带有存档文件的addr2line
EN

Stack Overflow用户
提问于 2019-10-13 13:32:17
回答 1查看 556关注 0票数 0

我试图将addr2line与存档文件libdpdk.a结合使用。

我有个回溯:

代码语言:javascript
复制
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]

我尝试了以下命令:

代码语言:javascript
复制
addr2line  0x46fd05 -f -e ../../build/lib/librte_eal.a

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

预期的输出应该是回溯跟踪中地址0x46fd050x46fd05中函数的名称,这取决于我传递的地址。目前没有与此地址相关联的符号名。

任何建议。

我使用-rdynamic编译了代码

EN

回答 1

Stack Overflow用户

发布于 2019-10-16 03:43:46

在选择.a/..so的原因方面,应该在执行的二进制文件中使用“addr2line”。原因是回溯地址是特定于二进制文件的。

相同的静态(.a)库通常会加载到不同二进制文件中的不同地址中。对于'.so‘(特别是位置独立的代码)来说是这样的,但是在许多情况下,Linux将尝试重用已经映射的'.so’文件,以便实际地址是相同的。

底线--从手册页--使用可执行文件名。

代码语言:javascript
复制
--exe=filename
           Specify the name of the executable for which addresses should be translated. 
           The default file is a.out.

在使用“.so”时,您需要在具有相同可执行文件、共享对象和LD_LIBRARY_PATH的系统上执行addr2line。如果在您的开发和生产上有不同的“.so”,地址可能不匹配。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58364054

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档