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

但它不能产生任何效果。

最佳答案



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

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

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

更新:



正如我所猜测的那样。



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

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

应该做的伎俩。

关于c++ - gdb core dump 在 "sudo apt-get install libc6-dbg"之后看不到任何符号,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32034205/

10-10 23:19