调试器选项
在 CLion 中,您可以使用 LLDB 在 macOS/Linux 上调试 C/C++ 可执行文件,并使用 GDB 在 Windows/Linux 上调试(在 macOS 上使用 GDB 调试 仅适用于自定义 GDB 二进制文件)。 此外,在 Windows 上还有一个 基于 LLDB 的 MSVC 工具链调试器。
当前捆绑调试器的版本:
Windows 的 GDB v15.2(不支持 Windows ARM64 的本地调试)
Linux 的 GDB v15.2
macOS 和 Linux 的 LLDB v19.1.3
Windows 上 MSVC 工具链的 LLDB v9.0.0
您还可以使用自定义 GDB 二进制文件,支持的版本为 7.8.x-14.1。
在调试器之间切换
转到 。
在右侧窗格的 调试器 字段中,为当前工具链选择调试器:

调试器数据视图
在 对话框中,您可以自定义 C/C++ 数据表示。

在这里,您可以控制标准库类型的渲染、模块名称、函数参数类型和函数模板参数等选项。 或者,使用 调试工具窗口 中的上下文菜单,在帧视图和变量视图中操作:


STL 容器渲染
当您选中 启用 GNU 库渲染器 复选框时,这会影响使用 gcc 编译器时 GDB 渲染 STL 容器的方式。 如果使用 clang 与 GDB 配合使用,此选项仅适用于 libstdc++ (有关更多信息,请参阅 下一章)。
当前此选项不适用于 LLDB。 检查 LLDB(从版本 9.0 开始)如何在下面的 LLDB STL 格式化器 中处理 libc++ 和 libstdcxx。
LLDB STL 格式化器
以下列出的内容适用于 LLDB 版本 9.0。
Type | libcxx | libstdc++ |
|---|---|---|
字符串 |
|
|
数组 |
|
|
向量 |
|
|
双端队列 |
|
|
list |
|
|
前向列表 |
|
|
set |
|
|
map |
|
|
多重集合 |
|
|
多重映射 |
|
|
无序集合 |
|
|
无序映射 |
|
|
无序多重集合 |
|
|
无序多重映射 |
|
|
栈 |
|
|
队列 |
|
|
优先队列 |
|
|
Type | libcxx | libstdc++ |
|---|---|---|
字符串 |
|
|
数组 |
|
|
向量 |
|
|
双端队列 |
|
|
list |
|
|
前向列表 |
|
|
set |
|
|
map |
|
|
多重集合 |
|
|
多重映射 |
|
|
无序集合 |
|
|
无序映射 |
|
|
无序多重集合 |
|
|
无序多重映射 |
|
|
栈 |
|
|
队列 |
|
|
优先队列 |
|
|
用于 macOS 的 GDB 的 STL 渲染器
将 GDB 用作调试后端并结合 Clang (CMake 默认编译器)在 macOS 上查看 STL 容器内容时存在限制。 作为解决方法,请尝试以下说明。
使用
libstdc++库代替libc++。 要在项目中包含libstdc++,请在 CMakeLists.txt 中添加以下命令:set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libstdc++")或者,转到 ,并在 CMake 选项 字段中指定库:
-DCMAKE_CXX_FLAGS="-stdlib=libstdc++"我们还建议您使用 dwarf3 调试信息格式。 为此,请将以下命令添加到您的 CMakeLists.txt :
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -gdwarf-3") set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -gdwarf-3")
自定义 .gdbinit/.lldbinit 文件
如果您的项目需要更多的调试配置选项,您可以创建一个自定义初始化文件, .gdbinit 用于 GDB 或 .lldbinit 用于 LLDB,并将其放置在项目根目录下。 此文件可以通过 VCS 与其他项目文件一起共享。
通常,GDB/LLDB 在启动时会按一定顺序加载多个初始化文件。 首先,调试器会在用户的主目录中查找初始化文件,然后在当前工作目录(您的项目根目录)中查找文件。
默认情况下,出于安全原因,不会执行项目特定初始化文件中的命令。 要允许执行,请按照以下描述修改主目录中的初始化文件。
启用读取项目特定的 .gdbinit/.lldbinit
在 ~/.gdbinit 文件中设置权限。
对于 GDB 11.1 及更新版本,您可以改用 $HOME/.config/gdb/gdbinit 或 $HOME/Library/Preferences/gdb/gdbinit 。
在使用 WSL 时,编辑位于 WSL 主目录中的 .gdbinit 文件, /home/[user]/.gdbinit 。
适用于所有项目
set auto-load local-gdbinit on add-auto-load-safe-path /适用于特定项目
set auto-load local-gdbinit on add-auto-load-safe-path [full path to the project root]/.gdbinit
在主目录的 ~/.lldbinit 文件中设置权限:
调整 GDB 超时值
您可以通过在 CLion 注册表中设置相应的属性来控制 GDB 超时值。
请按 Ctrl+Shift+A 或从主菜单中选择 。 在打开的弹出窗口中,开始输入
Registry,选择相应的项目并按 Enter。
在打开的对话框中,开始输入 cidr.debugger.timeout。 点击高亮字符串的 Value 字段,并以毫秒为单位输入超时值。

在 Windows 上配置外部 GDB 控制台
在 Windows 上,使用 GDB 8.0 之前的版本时,会为应用程序输入/输出使用单独的控制台。 对于较新的 GDB 版本,输出默认重定向到 CLion 控制台。 但是,您可以切换回打开外部输出窗口。
请按 Ctrl+Shift+A 或从主菜单中选择 。 在打开的弹出窗口中,开始输入
Registry,选择相应的项目并按 Enter。
在打开的对话框中,开始输入 cidr.debugger.gdb.workaround.windows.forceExternalConsole。 点击高亮字符串的 Value 字段,并以毫秒为单位输入超时值。
