gdb RelWithDebInfo 调试信息分离 2025-10-02

-O 2/3 -g -DNDEBUG

release 是开启优化无调试信息
debug 是不进行优化,包含调试信息
RelWithDebInfo 提供优化和调试信息

发布的时候需要将调试信息和可执行文件分离

使用步骤
1. 编译的选项即使用优化,也使用 -g 要调试信息
2. 使用objcopy将可执行文件中的调试信息提取出来,另存为一个新文件。

objcopy --only-keep-debug ./src/redis-server redis-server.debug

(将redis-server中的调试信息转存到redis-server.debug中)(这一步是不会对redis-server做任何的改变的)
3. 将可执行文件中的调试信息去掉,(这里使用strip命令,objcopy也是可以的)

strip -g redis-server
4.使用 `objcopy`添加调试链接(它在被“瘦身”的可执行文件中添加一个“注释”(即**调试链接**),告诉GDB:“我的调试信息在 `redis-server.debug`这个文件里”)
objcopy --add-gnu-debuglink=redis-server.debug redis-server

(通过这一步使得redis-serverredis-server.debug就通过这个链接关联起来了,我们可以想平常使用gdb调试一样调试了)
(这一步其实是向里面添加的调试信息的链接和crc校验和)
(CRC校验和目的是为了验证调试信息和可执行文件是否是同一个版本的)

可以使用gdb像之前一个进行debug这个“瘦身”(分离了调试信息)的可执行文件了

gdb ./redis-server
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容