【问题标题】:gdb core dump can not see any symbols after "sudo apt-get install libc6-dbg"gdb 核心转储在“sudo apt-get install libc6-dbg”之后看不到任何符号
【发布时间】:2015-08-16 10:47:39
【问题描述】:

我正在尝试使用核心转储文件在 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

但它不会产生任何效果。

【问题讨论】:

    标签: c++ linux ubuntu gdb libc


    【解决方案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 上找到了 here is an answer ;-)

    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 在您的问题中,您没有提及关于另一台计算机或复制的任何事情。你为什么不编辑它来讲述整个的故事(细节很重要)。不,从另一台计算机复制 libc.so.6 是一个非常糟糕的主意,并且几乎可以保证使您的系统无法启动。不要那样做。
    • 我有 2 台计算机,它们运行完全相同的系统(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 中使用它,它得到了正确的答案。
    • 看来命令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 版本?非常感谢。
    • 非常感谢。但是当我使用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 的 2 个版本?
    【解决方案2】:

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

    【讨论】:

    • 我也用purpge,不过也没啥意义。不过也谢谢你
    猜你喜欢
    • 2016-12-10
    • 2023-03-11
    • 1970-01-01
    • 2016-07-28
    • 2011-09-23
    • 2018-03-01
    • 2020-10-31
    • 1970-01-01
    • 2022-08-16
    相关资源
    最近更新 更多