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