在我为gdb安装了那些丢失的调试信息包之后,我可以做什么不同的事情?

在我为gdb安装了那些丢失的调试信息包之后,我可以做什么不同的事情?,gdb,Gdb,我有一个新安装CentOS Linux 7.2.1511版(核心版),而gdbverison是GNU gdb(gdb)Red Hat Enterprise Linux 7.6.1-119.el7 我看到了丢失的单独debuginfos警告 Missing separate debuginfos, use: debuginfo-install glibc-2.17-307.el7.1.x86_64 libgcc-4.8.5-44.el7.x86_64 libstdc++-4.8.5-44.el7.

我有一个新安装
CentOS Linux 7.2.1511版(核心版)
,而
gdb
verison是
GNU gdb(gdb)Red Hat Enterprise Linux 7.6.1-119.el7

我看到了丢失的单独debuginfos警告

Missing separate debuginfos, use: debuginfo-install glibc-2.17-307.el7.1.x86_64 libgcc-4.8.5-44.el7.x86_64 libstdc++-4.8.5-44.el7.x86_64
我了解到:

缺少
glibc-2.17-157.el7_3.1.x86_64
只会阻止您通过
glibc
本身

根据这个答案


现在我已经成功地安装了所有这些调试信息包。但我看不出有什么不同。安装了这些额外的软件包后,我现在可以做什么

以C++程序为例:

#包括
#包括
#包括
使用名称空间std;
int main(){
向量a={1,2,3};
向量b={4,5,6};
映射m={1,a},{2,b};
库特
那么有什么区别呢

不同之处在于,您现在可以列出GLIBC的源代码(这与
libstdc++
不同)并逐步遍历它们

尝试使用和不使用
debuginfo安装的
(gdb)列表中止

更新:

我能在没有这些包的情况下“列出libstdc++的soucre”和“逐步完成它们”吗

libstdc++
与GLIBC的不同之处在于,它的大部分功能是由模板提供的,模板包含在您自己的源代码中。当您逐步完成例如
/usr/include/c++/4.8.2/bits/stl_map.h
时,这正是发生的事情

但是,您可能仍然需要
debuginfo安装libstdc++-4.8.5-44.el7.x86_64
,以便能够列出并单步执行
libstdc++
中不属于所提供标头的部分

IIRC,std::basic_string的实现和std::basic_ios的各个部分都属于这一类。您可以运行
nm-C libstdc++.so.6 | egrep'[TW].
来查看这些符号的列表

更新2:


那些安装的调试信息只是glibc和gcc源文本文件吗

没有

调试信息是一组文件,允许调试器将库的
.text
中的特定偏移量与在该偏移量处生成机器代码的源代码相关联。它还对参数和变量的类型、给定函数中局部变量的位置等进行编码。您可以阅读有关调试信息的更多信息


在某些系统上,调试信息包还包括库的源代码,但这在Linux系统中并不通用,并且不是调试信息包的主要用途(如果您只需要源代码,可以安装源代码包)。

多亏@Employed俄语的回答,现在我知道了确切的区别

下面是我从2个新安装的CentOS 7.2中观察到的情况,一个安装了调试信息,另一个没有

操作系统版本:
CentOS Linux 7.2.1511版(核心版)

GDB版本:
GNU GDB(GDB)Red Hat Enterprise Linux 7.6.1-119.el7

测试程序:

#包括
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
int main(){
字符串s=“123”;
向量a={1,2,3};
向量b={4,5,6};
映射m={1,a},{2,b};

没问题。我要在我的VPS上安装一个新的CentOS 7.2,然后试试你说的。但是请允许我提前问一个问题,所以安装debuginfo软件包就是让我列出GLIBC的源代码并逐步检查它们。那么为什么要我安装
debuginfo install libstdc++-4.8.5-44.el7.x86_64
,这与
相关呢>c++
?我能在没有这些包的情况下“列出libstdc++的源代码”和“逐步完成它们”吗?(如我的问题所示,当我看到我在
stl\u map.h
中时,这意味着我可以逐步完成
libstdc++
对吗?对不起,我不是很确定。))谢谢你提供的额外信息。检查我的答案,看看我是否有什么错误。:P再次感谢你!那些安装的调试信息只是glibc和gcc源文本文件吗?我在玩一些带有
g++
-g
设置的测试程序,而现在我感觉从
debuginfo安装
安装的是仅源文本文件
.c
@Rick我再次更新了答案。在阅读了您回答的这个问题后,我了解了详细信息。我还了解了单独的调试信息文件是如何工作的,并尝试手动重定向
gdb
,以查找具有
设置替换路径
的源文件。
std::map<int, std::vector<int, std::allocator<int> >, std::less<int>, std::allocator<std::pair<int const, std::vector<int, std::allocator<int> > > > >::operator[](int&&) (this=0x7fffffffe3f0, 
    __k=<unknown type in /root/a.out, CU 0x0, DIE 0x7b70>) at /usr/include/c++/4.8.2/bits/stl_map.h:481
481     iterator __i = lower_bound(__k);
debuginfo-install glibc-2.17-307.el7.1.x86_64 libgcc-4.8.5-44.el7.x86_64 libstdc++-4.8.5-44.el7.x86_64
========================================================================================================================
 Package                                      Arch              Version                      Repository            Size
========================================================================================================================
Installing:
 gcc-debuginfo                                x86_64            4.8.5-44.el7                 debuginfo            195 M
 glibc-debuginfo                              x86_64            2.17-307.el7.1               debuginfo            9.5 M
 nss-softokn-debuginfo                        x86_64            3.44.0-8.el7_7               debuginfo            2.1 M
 yum-plugin-auto-update-debug-info            noarch            1.1.31-54.el7_8              os                    29 k
Installing for dependencies:
 gcc-base-debuginfo                           x86_64            4.8.5-44.el7                 debuginfo            2.9 M
 glibc-debuginfo-common                       x86_64            2.17-307.el7.1               debuginfo            9.7 M
Breakpoint 1, main () at test.cpp:10
10          string s = "123";
(gdb) s
std::allocator<char>::allocator (this=0x7fffffffe45b)
    at /usr/src/debug/gcc-4.8.5-20150702/obj-x86_64-redhat-linux/x86_64-redhat-linux/libstdc++-v3/include/bits/allocator.h:113
113       allocator() throw() { }
(gdb) s
std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string (this=0x7fffffffe450, 
    __s=0x403b73 "123", __a=...)
    at /usr/src/debug/gcc-4.8.5-20150702/obj-x86_64-redhat-linux/x86_64-redhat-linux/libstdc++-v3/include/bits/basic_string.tcc:212
212     basic_string<_CharT, _Traits, _Alloc>::
(gdb) s

16          cout << s << endl;
(gdb) n
123
17      abort();
(gdb) s
__GI_abort () at abort.c:52
52  {
(gdb) list
47  
48  
49  /* Cause an abnormal program termination with core-dump.  */
50  void
51  abort (void)
52  {
53    struct sigaction act;
54    sigset_t sigs;
55  
56    /* First acquire the lock.  */