【转】CMake生成的可执行文件能够gdb调试

最近在看开源项目TeamTalk的源码,想要调试一下,发现调试不了,因为原来的编译脚本没有加入调试信息,百度了一下,只需要在CMakeLists.txt文件中加入下面三行代码:

SET(CMAKE_BUILD_TYPE "Debug") 

SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb")

SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")

然后重新make就可以用gdb调试了

原文地址:https://blog.youkuaiyun.com/gdp12315_gu/article/details/45063479

<think>好的,用户想了解CMake如何支持GDB调试。首先,我需要回忆一下CMake的基本知识。CMake是一个跨平台的构建系统,可以生成Makefile或者其他项目文件。要让程序可调试,编译时需要加上调试信息,通常是-g选项。 用户可能已经知道GDB的基本用法,但不确定如何在CMake中配置。所以需要解释如何在CMakeLists.txt中设置编译标志,确保生成带有调试符号的可执行文件。 可能需要提到不同的CMake变量,比如CMAKE_BUILD_TYPE设置为Debug,这样CMake会自动添加必要的标志,比如-g。同时,不同的编译器可能有不同的调试选项,但CMake通常会自动处理这些差异。 另外,用户可能想知道如何确保优化不会影响调试,比如在Debug配置中禁用优化。或者是否需要显式地添加其他选项,比如-ggdb用于GDB特定的调试信息。 还要考虑不同生成器的情况,比如使用Ninja或者Visual Studio,但用户的问题集中在GDB,所以可能主要是Unix-like环境下的Makefile生成。 可能还需要提到在运行程序时如何启动GDB,比如通过CMake的--target参数或者直接使用生成调试信息。或者使用add_custom_target来创建调试目标,方便用户直接运行make debug来启动GDB。 需要检查是否遗漏了其他相关配置,比如C++标准、是否影响其他构建类型(如Release),或者是否需要为特定目标单独设置编译选项,而不是全局设置。 还要注意不同CMake版本的差异,是否有新的推荐做法,比如使用target_compile_options而不是add_compile_options,以更精确地控制目标属性。 最后,是否需要给出一个完整的示例,比如一个简单的CMakeLists.txt文件,展示如何配置Debug构建类型,并验证生成的二进制文件是否包含调试符号,例如使用file命令检查。 总结步骤应该是:设置构建类型为Debug,确保编译选项包含-g,生成Makefile,编译后使用gdb调试。可能还要提醒用户运行cmake时指定-DCMAKE_BUILD_TYPE=Debug,或者在CMakeLists中设置默认值。</think>是的,CMake 可以方便地与 GDB 调试工具结合使用。以下是配置 CMake 项目以支持 GDB 调试的步骤和关键点: --- ### **1. 启用调试符号** 在 CMake 中,编译时需要添加 `-g` 标志以生成调试信息(供 GDB 使用)。常用的方法有两种: #### **方式 1:通过 `CMAKE_BUILD_TYPE` 指定构建类型** ```cmake # 在 CMakeLists.txt 中设置默认构建类型(可选) if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE Debug) endif() # 自动关联 Debug 模式的编译选项(包括 -g) ``` 在命令行中指定构建类型: ```bash cmake -DCMAKE_BUILD_TYPE=Debug .. make ``` #### **方式 2:手动添加编译选项** 若需全局添加调试标志(无论构建类型): ```cmake add_compile_options(-g) ``` --- ### **2. 禁用优化(可选)** 调试时建议关闭编译器优化,避免代码被优化后难以跟踪。在 `Debug` 模式下,CMake 默认会禁用优化(如 `-O0`)。 若需手动控制: ```cmake set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0") ``` --- ### **3. 生成项目并编译** ```bash mkdir build && cd build cmake -DCMAKE_BUILD_TYPE=Debug .. make ``` --- ### **4. 使用 GDB 调试** 编译完成后,直接通过 GDB 启动生成可执行文件: ```bash gdb ./your_executable ``` 或在 CMake 中自定义调试命令(如 `make debug`): ```cmake add_custom_target(debug COMMAND gdb -ex run ./your_executable DEPENDS your_executable ) ``` --- ### **验证调试信息** 检查可执行文件是否包含调试符号: ```bash file ./your_executable # 输出应包含 "with debug_info" 或类似信息 ``` --- ### **完整 CMakeLists.txt 示例** ```cmake cmake_minimum_required(VERSION 3.10) project(MyProject) # 设置默认构建类型为 Debug if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE Debug) endif() # 添加可执行文件 add_executable(my_app main.cpp) # 可选:显式禁用优化(Debug 模式默认已禁用) set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0") # 可选:添加自定义调试选项(如 -ggdb3 更详细的调试信息) target_compile_options(my_app PRIVATE -ggdb3) ``` --- ### **关键点总结** - **`CMAKE_BUILD_TYPE=Debug`**:自动启用 `-g` 并禁用优化。 - **手动添加 `-g`**:适合需要灵活控制的场景。 - **GDB 集成**:通过命令行或 CMake 自定义命令启动调试。 通过上述配置,即可在 CMake 项目中高效使用 GDB 进行代码调试
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值