【问题标题】:Unable to use standard library debugging symbols in gdb无法在 gdb 中使用标准库调试符号
【发布时间】:2019-12-14 05:36:36
【问题描述】:

我正在使用此代码作为测试。

#include <sstream>
#include <iostream>

int main () {
   std::stringstream ss;
   ss << "This is a test\n";
   std::cout << ss.str();
}

我编译 g++ -O0 -g test.cpp。当我在 gdb 中运行程序并在 cout 行的断点处停止时,尝试打印 ssss.str() 失败。

(gdb) p ss
$1 = <incomplete type>
(gdb) p ss.str()
Couldn't find method std::stringstream::str

gdb 还给了我大量关于 libstdc++ 和 libc 的调试信息与它们各自的库不匹配的警告,然后是一个额外的警告,建议我安装单独的 debuginfos。

warning: the debug information found in "/usr/lib/debug/usr/lib64/libc-2.17.so.debug" does not match "/lib64/libc.so.6" (CRC mismatch).
warning: the debug information found in "/usr/lib/debug/usr/lib64/libstdc++.so.6.0.19.debug" does not match "/lib64/libstdc++.so.6" (CRC mismatch).
Missing separate debuginfos, use: debuginfo-install glibc-2.17-260.el7_6.6.x86_64 libstdc++-4.8.5-36.el7_6.2.x86_64

但是,这些软件包已经根据rpm -qa 安装。我无权尝试重新安装这些或尝试来自此 similar question 的其他建议。

我还找到了this question 并检查了gdb 正在使用的debug-file-directory

(gdb) show debug-file-directory
The directory where separate debug symbols are searched for is "/usr/lib/debug".

我正在使用包含的 g++ 和 gdb 版本运行 RHEL7。

g++ (GCC) 4.8.5 20150623 (Red Hat 4.8.5-36)

GNU gdb (GDB) Red Hat Enterprise Linux 7.6.1-114.el7

【问题讨论】:

  • "这些包已经根据 rpm -qa 安装了" -- 这些包的确切版本是:glibc-2.17-260.el7_6.6.x86_64 libstdc++-4.8.5-36.el7_6.2.x86_64 安装,还是其他版本?
  • 确切的。

标签: gdb glibc libstdc++


【解决方案1】:

debuginfo-install glibc-2.17-260.el7_6.6.x86_64 libstdc++-4.8.5-36.el7_6.2.x86_64 命令将为这些软件包安装调试信息,而不是软件包本身。

似乎系统上已经安装了不同版本的调试信息,因此您应该可以请求系统管理员安装匹配的软件包版本。 (一些公司有反对在生产环境中安装编译器和调试器的政策,但这似乎并不适用于此。)

如果您无法在系统上获得正确的 debuginfo 软件包版本,您可以从 Red Hat 客户门户下载软件包,将其复制到机器上,使用 rpm2cpio … | cpio -id 解压,然后将 GDB 指向提取的调试信息.遗憾的是,在撰写本文时,Red Hat 并未提供公共符号服务器。

请注意,即使来自 CentOS 的软件包具有相同的名称/版本/发行版,它们也无法工作,因为由于构建环境不同,它们的二进制文件并不相同。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    • 2017-12-04
    • 2010-09-24
    • 2019-09-07
    • 1970-01-01
    • 1970-01-01
    • 2015-07-28
    相关资源
    最近更新 更多