【发布时间】:2015-03-28 10:04:41
【问题描述】:
(gdb) shared info -> 这表明所有共享的 lib syms 都已被读取 但仍然回溯 bt 显示任何函数都“没有可用的符号表信息”。
有人可以说明问题可能是什么吗?我该如何解决这个问题并获得有意义的追溯?
【问题讨论】:
(gdb) shared info -> 这表明所有共享的 lib syms 都已被读取 但仍然回溯 bt 显示任何函数都“没有可用的符号表信息”。
有人可以说明问题可能是什么吗?我该如何解决这个问题并获得有意义的追溯?
【问题讨论】:
info shared 输出中的那一列总是令人困惑。这并不意味着实际上有调试信息——它只是意味着 gdb 试图读取它。这些信息对普通用户实际上并不是那么有用。
很难确定您是否真的有调试信息。一种方法是在您的各种文件上使用readelf -WS 并查找相关的调试部分。这会告诉你它是否存在。
但是!甚至这还不够。也许缺少一个部分(除非您一直在处理文件,否则不太可能)。或者可能 gdb 拒绝了调试信息的某些部分(也不太可能)。
另一种可能性是您已将调试信息与库分开。这在发行版中很典型。在这种情况下,您必须确保安装调试信息包——在 Fedora 中,您可以使用 debuginfo-install 执行此操作;想必其他发行版也有类似的方法。
在单独的调试信息情况下,您必须确保安装与构成核心的进程所使用的文件版本完全相同的版本。这可能很困难。有时可以通过检查构建 ID 来完成,但这并不总是可行的,因为发行版经常清除文件的过期版本。
如果有问题的库是您的库,那么您必须使用 -g 重新编译它们,然后尝试重新创建核心。事后确实没有可靠的方法来生成必要的调试信息。
如果核心是在其他机器上创建的,您可以尝试找到这些文件并在本地安装它们。您几乎可以在任何地方安装它们,并使用 set sysroot 功能告诉 gdb 如何找到它们。
【讨论】: