如何使用 CMake 启用 gdb -g3 调试级别?

Posted

技术标签:

【中文标题】如何使用 CMake 启用 gdb -g3 调试级别?【英文标题】:How to enabled gdb -g3 debug level with CMake? 【发布时间】:2021-02-11 02:24:08 【问题描述】:

如果您想在 CMake 上启用调试,请使用 cmake .. -DCMAKE_BUILD_TYPE=Debug,但这只会设置默认调试级别 -g

-glevel 请求调试信息并使用 level 指定多少信息。默认级别为 2。

Level 0 根本不产生任何调试信息。因此,-g0 否定 -g。

级别 1 产生最少的信息,足以在部分中进行回溯 您不打算调试的程序。这包括说明 函数和外部变量,但没有关于本地的信息 变量,没有行号。

第 3 级包括额外信息,例如存在的所有宏定义 在节目中。某些调试器在您使用时支持宏扩展 -g3.

如何使cmake .. -DCMAKE_BUILD_TYPE=Debug 设置为-g3 而不是-g

    https://***.com/a/864902/4934640 https://sourceware.org/bugzilla/show_bug.cgi?id=11067

【问题讨论】:

【参考方案1】:

设置CMAKE_C_FLAGS "-Og -g3 ...

【讨论】:

你能举个例子吗?即cmake .. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_C_FLAGS "-Og -g3"? 我在cmake文件中设置set(CMAKE_C_FLAGS "-Og -g3 ... 通常当我设置g3时我优化-Og(不是所有目标都支持,但arm-none-eabi肯定支持)【参考方案2】:

你也可以设置CMAKE_CXX_FLAGS_DEBUG,这样只会在CMake在Debug模式下编译时影响代码:

set(CMAKE_CXX_FLAGS_DEBUG "$CMAKE_CXX_FLAGS_DEBUG -g3 -ggdb")

参考资料:

    Change default value of CMAKE_CXX_FLAGS_DEBUG and friends in CMake CMake - compile with /MT instead of /MD

【讨论】:

以上是关于如何使用 CMake 启用 gdb -g3 调试级别?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 cmake 调试 gcc 代码

GDB C++ 出错时无法获取源核心行(分段错误)

GDB 调试Coredump问题

gdb调试caffe工程

gdb调试ros程序

gdb调试ros程序