gdb 核心转储在 "sudo apt-get install libc6-dbg" 之后看不到任何符号

gdb core dump can not see any symbols after "sudo apt-get install libc6-dbg"

我正在尝试使用核心转储文件调试 Ubuntu 12.04(x86_64) LTS 中的程序。一开始,"bt"命令就ok了,就像下面的

(gdb) bt
#0  0x00007f3b38e3f425 in raise () from /lib/x86_64-linux-gnu/libc.so.6
#1  0x00007f3b38e42b8b in abort () from /lib/x86_64-linux-gnu/libc.so.6
#2  0x00007f3b38e7d39e in ?? () from /lib/x86_64-linux-gnu/libc.so.6
#3  0x00007f3b38e87b96 in ?? () from /lib/x86_64-linux-gnu/libc.so.6
#4  0x00007f3b3947dff6 in std::string::assign(std::string const&) () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#5  0x000000000041cf5a in operator= (__str=..., this=<optimized out>) at /usr/include/c++/4.6/bits/basic_string.h:542

我想看到 libc.so.6 中的符号,所以我使用

安装 libc6-dbg
sudo apt-get install libc6-dbg

但安装后

libc6-dbg

我搞错了,如下所示:

(gdb) bt
#0  0x00007f3b38e3f425 in ?? () from /lib/x86_64-linux-gnu/libc.so.6
#1  0x00007f3b38e42b8b in ?? () from /lib/x86_64-linux-gnu/libc.so.6
#2  0x0000000000000003 in ?? ()
#3  0x00007fffca496804 in ?? ()
#4  0x000000000000000c in ?? ()
#5  0x00007f3b38f84eab in ?? () from /lib/x86_64-linux-gnu/libc.so.6
#6  0x0000000000000002 in ?? ()
#7  0x0000000000000020 in ?? ()
#8  0x0000000000000000 in ?? ()

我尝试使用

删除 lib6c-dbg
sudo apt-get remove libc6-dbg

但是没有任何效果

remove 仅删除二进制文件,但不删除配置和数据文件,您可能需要的是 purgesudo apt-get purge libc6-dbg 应该可以解决问题。

I get all the thing wrong , showing in the below:

可能发生的是apt-get install libc6-dbg更新了已经安装的libc6,并且当前安装的libc.so.6 不再匹配生成 core 文件时使用的文件。

对于 GDB 分析,您需要一个与运行时使用的完全 匹配的副本。

因此您需要重新安装版本的libc6(查看/var/log/apt/history.log以了解它是什么),并且匹配版本的libc6-dbg.

更新:

It seems that the command apt-get install libc6-dbg get the libraries with version 2.15-0ubuntu10.12

正如我所猜测的那样。

How can I recover it to the version in 2.15-0ubuntu10.4

这确实是一个系统管理员问题,但是 here is an answer 我在 Google 上找到了 ;-)

sudo apt-get install libc6=2.15-0ubuntu10.4 libc6-dbg=2.15-0ubuntu10.4

应该可以解决问题。