【全网最暴力解决方案】使用gdb调试时遭遇“Missing separate debuginfos, use: debuginfo-install glibc....”报错信息

问题现象

日前在CentOS 6虚拟机上使用gdb调试一个由简单的.c文件编译生成的可执行程序遭遇如下gdb报错

Missing separate debuginfos, use: debuginfo-install glibc-2.12-1.212.el6_10.3.i686.rpm

搜寻开头的关键词可以在百度上搜到不少相关的解决方案,但内容实则千篇一律,且并没有解释问题背后的原因所在。本文在此将对该问题进行一定的程度的剖析并给出另外一套暴力与直接的解决方案。

问题原因

首先,根据报错的字面意思即在调试过程中缺失独立的调试信息,那何为“独立的调试信息”?学过C语言的朋友都知道,如果编写代码后使用gcc编译器进行编译时,若不加上-g编译参数,或后期使用strip工具进行二次处理,生成的二进制文件中将不带调试段信息,而gdb的调试都是基于该调试段进行的,在linux世界这部分内容往往也被称作debuginfo。

其次,各大发行版提供的二进制软件包为了缩小体积,且用户往往不需要对软件(包括内核、libc这类基础设施)本身进行调试,因此往往不带调试信息。由于在Linux环境下绝大部分程序都依赖于libc(包括最简单的hello world),若系统预装的libc未带调试段信息,将影响gdb对目标程序进行调试操作。

解决方案

常规解决方案

其实对linux有所了解的同学看到该报错的第一反应就是执行报错信息中提示的可解决该问题的命令行,笔者也是这么一个机智的好少年,但不幸的是这台机子上并没有安装debuginfo-install命令,且安装完debuginfo-install命令后,又产生了其他奇奇怪怪的问题导致该命令不能正常执行,因此网上搜到的方法就失效了。

那么问题来了,这个命令到底执行了什么操作呢?debuginfo-install是yum的一个子命令,但CentOS似乎不会预装该命令,需自行先安装其所在的yum-util软件包,其功能顾名思义是专门用于安装软件包的debuginfo,即根据传入参数中的报名,搜寻软件源上对应的debuginfo软件包,然后下载并安装。如此一来,由于笔者的虚拟机不能直接连通外网,即便该命令可正常执行也不能正确安装对应的debuginfo包。

暴力解决方案

常规的解决方案虽然不能解决笔者的问题,但清楚问题的来龙去脉后,依旧可以轻松地解决问题。具体为:

  • 登录CentOS官方的debuginfo下载源:http://debuginfo.centos.org/
  • 下载对应的rpm包。debuginfo需要和系统中的既有的软件包对应,最简单的识别方法是寻找名称最为相近的,二者的差别往往为前者仅在名字中添加了一个“debuginfo”单词,以笔者遭遇的情况为例,对应的debuginfo软件包为:http://debuginfo.centos.org/6/i386/glibc-debuginfo-2.12-1.212.el6_10.3.i686.rpm,此外还需要下载glibc-common对应debuginfo软件包,glic-common软件包的数字标号部分与glic相同,上述情况为例,对应的debuginfo软件包为glibc-debuginfo-common-2.12-1.212.el6_10.3.i686.rpm。
  • 将下载好的两个rpm软件包拷贝至虚拟机中,使用rpm -ivh命令,依次安装glibc-common与glibc对应的debuginfo包,即可完美解决问题!
  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值