当另一个库具有相同的符号时,gdb 不显示来自共享库的符号
Posted
技术标签:
【中文标题】当另一个库具有相同的符号时,gdb 不显示来自共享库的符号【英文标题】:gdb doesn't show symbol from a shared library when another library has the same symbol 【发布时间】:2019-08-04 00:25:18 【问题描述】:我正在调试一个与两个共享库(liba.so 和 libb.so)链接的 Linux 程序。每个库在同一文件“main.cpp”中都有相同的符号“Journal”。gdb 仅从其中一个库中查找并打印符号。 如何从另一个库中查找和打印符号? 如何打印特定共享库中的所有符号?
(gdb)info var Journal
File ../main.cpp:
SJournalEntry Journal[64];
(gdb) info address Journal
Symbol "Journal" is static storage at address 0x7ffff7febee0.
(gdb) info symbol 0x7ffff7febee0
Journal in section .bss of /usr/lib/liba.so
但这里有另一个符号:
(gdb) info symbol 0x7ffff7dc7070
Journal in section .bss of /usr/lib/libb.so
【问题讨论】:
【参考方案1】:gdb 仅从其中一个库中查找并打印符号。
您可能正在查看this bug。
如何从另一个库中查找和打印符号?
我认为你不能(没有运行 nm libb.so
并手动将符号重新定位到 libb.so
加载地址)。
注意:在正常的符号解析规则下,假设符号是全局的,所有对 Journal
的引用都将绑定到同一个符号,因此该符号也存在于另一个库中这一事实是无关紧要的。
如何打印特定共享库中的所有符号?
我不相信 GDB 有办法做到这一点。
【讨论】:
以上是关于当另一个库具有相同的符号时,gdb 不显示来自共享库的符号的主要内容,如果未能解决你的问题,请参考以下文章