-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-server和 redis-server.debug就通过这个链接关联起来了,我们可以想平常使用gdb调试一样调试了)
(这一步其实是向里面添加的调试信息的链接和crc校验和)
(CRC校验和目的是为了验证调试信息和可执行文件是否是同一个版本的)
可以使用gdb像之前一个进行debug这个“瘦身”(分离了调试信息)的可执行文件了
gdb ./redis-server