runsisi's

technical notes

Ceph 编译调试版本

2019-02-12 runsisi#ceph#debug

ceph 使用 cmake 对源代码的构建进行管理,默认情况下(包括正式发布版本和本地 vstart 环境编译版本)编译出来的都是带调试信息的 release 版本,即 ceph/src/CMakeLists.txt 文件中的 CMAKE_BUILD_TYPE 默认定义为 RelWithDebInfo,由于是 release 版本代码在编译时进行了优化,导致 gdb 进行调试时出现乱跳转的情况。解决这个问题比较简单,在 cmake 运行时将 CMAKE_BUILD_TYPE 定义成 Debug

cmake -DCMAKE_BUILD_TYPE=Debug ..

其实比较简单的方法使参考 ceph/do_freebsd.sh 脚本中的命令行:

cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_FLAGS_DEBUG="$CXX_FLAGS_DEBUG -O0 -g" -DCMAKE_C_FLAGS_DEBUG="$C_FLAGS_DEBUG -O0 -g" ..

注意:如果是 CentOS 7.x 系统,在编译 ceph Nautilus 及之后的版本时需要使用 cmake3。

参考资料

C/C++: How do you set GDB debug flag (-g) with cmake

https://bytefreaks.net/programming-2/cc-how-do-you-set-gdb-debug-flag-g-with-cmake