superb owl
superb owl

Reputation: 185

Unable to use standard library debugging symbols in gdb

I am using this code as a test.

#include <sstream>
#include <iostream>

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

I compile with g++ -O0 -g test.cpp. When I run the program in gdb and stop at a breakpoint on the cout line, trying to print ss or ss.str() fails.

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

gdb also gives me a ton of warnings about the debug information for libstdc++ and libc not matching their respective libraries, followed by an additional warning suggesting I install separate 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

However, these packages are already installed according to rpm -qa. I don't have permissions to attempt to reinstall these or try other suggestions from this similar question.

I also found this question and checked the debug-file-directory that gdb is using.

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

I am running RHEL7 with the included versions of g++ and gdb.

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

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

Upvotes: 2

Views: 2749

Answers (1)

Florian Weimer
Florian Weimer

Reputation: 33694

The command debuginfo-install glibc-2.17-260.el7_6.6.x86_64 libstdc++-4.8.5-36.el7_6.2.x86_64 will install debugging information for those packages, not the packages themselves.

It seems that a different version of the debugging information has already been installed on the system, so you should be able to request that your system administrator installs matching package versions. (Some companies have policies against installing compilers and debuggers in production, but that does not seem to apply here.)

If you cannot get the correct debuginfo package versions installed on the system, you can download the packages from the Red Hat Customer Portal, copy it to the machine, unpack them using rpm2cpio … | cpio -id, and point GDB to the extracted debugging information. As of this writing, Red Hat does not offer a public symbol server unfortunately.

Note that packages from CentOS will not work even if they have the same name/version/release because they are not binary-identical due to different build environments.

Upvotes: 1

Related Questions