问题现象
日前在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命令后,又产生了其他奇奇怪怪的问题导致该命