"GDB核心转储无法在执行“sudo apt-get install libc6-dbg”后查看任何符号"

4

我正在尝试使用核心转储文件在Ubuntu 12.04(x86_64)LTS中调试程序。起初,“bt”命令是可以的,如下所示:

(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

但是它却没有产生任何作用。

2个回答

1

remove 只会删除二进制文件,而不会删除配置和数据文件,你可能需要使用 purge。运行 sudo apt-get purge libc6-dbg 即可解决问题。


我也使用purge,但它也没有意义。但还是谢谢你。 - user5232088

1
我所有的东西都错了,如下所示:
可能发生的情况是,apt-get install libc6-dbg 也更新了已安装的libc6,并且当前安装的libc.so.6不再与生成core文件时使用的那个版本匹配。
对于GDB分析,您需要一个与运行时完全匹配的副本。
因此,您需要重新安装旧版本的libc6(在/var/log/apt/history.log中查找它是什么),以及匹配的libc6-dbg版本。
更新:
似乎命令apt-get install libc6-dbg获取了版本为2.15-0ubuntu10.12的库,就像我猜测的一样。
如何将其恢复为2.15-0ubuntu10.4版本?

这实际上是一个系统管理员的问题,但我在Google上找到了答案 ;-)

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

应该可以搞定。

是的,libc.so.6libstdc++.so.6是不同的。我从另一台计算机复制了这两个文件,并在GDB中使用了set solib-absolute-prefix。一切似乎都正常。但是我该如何将这两个库(libc.so.6libstdc++.so.6)恢复到我的计算机上呢?只需简单地替换它们吗?如果我直接替换这两个文件,使用这两个库的程序会崩溃吗? - user5232088
@user5232088,在你的问题中,你没有提到任何关于另一台计算机或复制的事情。为什么不编辑它来讲述整个故事(细节在这里很重要)。而且,从另一台计算机复制libc.so.6是一个非常糟糕的想法,几乎可以保证会使你的系统无法启动。不要这样做。 - Employed Russian
我有两台电脑,它们都运行着完全相同的系统(Ubuntu 12.04(x86_64))。我使用其中一台电脑执行sudo apt-get install libc6-dbg并得到了我所问的问题。当我查看/var/log/apt/history.log时,我只发现关于libc6-dbg的一些内容,如下所示:Start-Date: 2015-08-17 00:21:21 Commandline: apt-get install libc6-dbg Install: libc6-dbg:amd64 (2.15-0ubuntu10.12) End-Date: 2015-08-17 00:21:23。因此,我从另一台电脑复制了库并在GDB中使用它,这样就得到了正确的答案。 - user5232088
似乎命令 apt-get install libc6-dbg 会将版本为2.15-0ubuntu10.12 (Install: libc6-dbg:amd64 (2.15-0ubuntu10.12)的库安装到计算机上。我发现另一台计算机上的libc6版本是2.15-0ubuntu10.4。我该如何恢复到版本2.15-0ubuntu10.4?非常感谢。 - user5232088
é‌‍ه¸¸و„ںè°¢م€‚ن½†وک¯ه½“وˆ‘ن½؟用sudo apt-get install libc6=2.15-0ubuntu10.4 libc6-dbg=2.15-0ubuntu10.4و—¶ï¼Œه‡؛çژ°ن؛†é”™è¯¯ن؟،وپ¯Reading package lists... Done Building dependency tree Reading state information... Done E: Version '2.15-0ubuntu10.4' for 'libc6' was not foundم€‚وˆ‘هœ¨https://launchpad.net/ubuntu/precise/amd64/libc6/2.15-0ubuntu10.4و‰¾هˆ°ن؛†è؟™ن¸ھ软ن»¶هŒ…م€‚وˆ‘هڈ¯ن»¥ن½؟用è؟™ن¸ھ软ن»¶هŒ…هگ—ï¼ںه®ƒن¼ڑو›؟وچ¢وˆ‘çڑ„电脑ن¸ٹçڑ„版وœ¬è؟کوک¯ن¼ڑوœ‰ن¸¤ن¸ھ版وœ¬çڑ„libc6ï¼ں - user5232088
@user5232088 是的,下载http://launchpadlibrarian.net/129756722/libc6_2.15-0ubuntu10.4_amd64.deb并使用`dpkg -i ibc6_2.15-0ubuntu10.4_amd64.deb`就可以将您的libc6版本降级到所需的版本。在此过程中,您还可以获取http://launchpadlibrarian.net/129756732/libc6-dbg_2.15-0ubuntu10.4_amd64.deb。 - Employed Russian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接