CLion教程-调试器选项

在CLion中,您可以使用LLDB在macOS/Linux上调试C/C++可执行文件,在Windows/Linux上使用GDB进行调试(仅当具有自定义GDB二进制文件时才可以在macOS上进行GDB调试)。此外,Windows上还有一个基于MSVC工具链的基于LLDB的调试器。
捆绑调试器的当前版本如下:
- Windows上的GDB v 13.1(不支持Windows ARM64的本地调试)
- Linux上的GDB v 13.1
- macOS和Linux上的LLDB v 15.0.5
- Windows上MSVC工具链上的LLDB v 9.0.0
您还可以使用自定义的GDB二进制文件,支持的版本为7.8.x-13.1。
在调试器之间切换
- 转到设置 | 构建、执行、部署 | 工具链。
- 在右侧窗格的调试器字段中,选择当前工具链的调试器:
在macOS上,LLDB被设置为默认的调试器。但是,如果您从在Windows或Linux中创建的jar文件中导入了CLion设置,则默认调试器将设置为捆绑或自定义的GDB版本,正如在原系统中定义的那样。
调试器数据视图
在设置 | 构建、执行、部署 | 调试器 | 数据视图 | C/C++ 对话框中,您可以自定义C/C++数据表示。
在这里,您可以控制标准库类型的呈现、模块名称、函数参数类型和函数模板参数以及其他选项。或者,使用调试工具窗口、框架视图和变量视图中的上下文菜单:
STL容器呈现
当您设置启用GNU库呈现器复选框时,这会影响使用gcc编译器时GDB呈现STL容器。对于与GDB一起使用的clang,此选项仅适用于libstdc++
。
目前,此选项不适用于LLDB。查看LLDB STL格式化程序如何处理LLDB STL格式化程序如下。
LLDB STL格式化程序
以下是LLDB版本9.0的准确列表。
macOS
类型 | libcxx | libstdc++ |
---|---|---|
字符串 | 支持 | 支持 |
数组 | 支持 | 支持 |
向量 | 支持 | 暂不支持 |
双端队列 | 支持 | 暂不支持 |
列表 | 支持 | 暂不支持 |
前向列表 | 支持 | 暂不支持 |
集合 | 支持 | 暂不支持 |
映射 | 支持 | 暂不支持 |
多重集 | 支持 | 暂不支持 |
多重映射 | 支持 | 暂不支持 |
无序集合 | 支持 | 暂不支持 |
无序映射 | 支持 | 暂不支持 |
无序多重集 | 支持 | 暂不支持 |
无序多重映射 | 支持 | 暂不支持 |
栈 | 支持 | 暂不支持 |
队列 | 支持 | 暂不支持 |
优先级队列 | 支持 | 暂不支持 |
Ubuntu
类型 | libcxx | libstdc++ |
---|---|---|
字符串 | 支持 if compiled with -fstandalone-debug | 支持 |
数组 | 支持 | 支持 |
向量 | 支持 | 支持 |
双端队列 | 支持 | 支持 |
列表 | 支持 | 支持 |
前向列表 | 支持 | 暂不支持 |
集合 | 支持 | 支持 |
映射 | 支持 | 支持 |
多重集 | 支持 | 支持 |
多重映射 | 支持 | 支持 |
无序集合 | 支持 | 暂不支持 |
无序映射 | 支持 | 暂不支持 |
无序多重集 | 支持 | 暂不支持 |
无序多重映射 | 支持 | 暂不支持 |
栈 | 支持 | 支持 |
队列 | 支持 | 支持 |
优先级队列 | 支持 | 支持 |
macOS上GDB的STL呈现程序
将GDB用作调试后端并使用Clang(CMake的默认编译器)的组合意味着在macOS上查看STL容器的内容存在一些限制。作为解决方法,可以尝试以下说明。
使用
libstdc++
库代替libc++
。要在项目中包括libstdc++
,请在CMakeLists.txt中添加以下命令:set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libstdc++")
或者,转到设置 | 构建、执行、部署 | CMake,并在CMake选项字段中指定库:
-DCMAKE_CXX_FLAGS="-stdlib=libstdc++"
libstdc++在GCC 4.2.1的水平上提供对C++的支持。
我们还建议您使用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文件
如果您的项目需要更多的调试配置选项,可以创建一个自定义的初始化文件,用于GDB的.gdbinit或用于LLDB的.lldbinit,并将其放置在项目根目录下。这个文件可以通过VCS与其他项目文件一起共享。
请注意,.gdbinit / .lldbinit文件与IDE无关,当在CLion之外使用时会以类似的方式工作。
通常,在启动期间,GDB/LLDB会按照一定的顺序加载多个初始化文件。首先,调试器会在用户的主目录中查找初始化文件,然后在当前工作目录(项目根目录)中查找文件。
出于安全原因,默认情况下,不会执行来自项目特定的初始化文件的命令。要允许执行这些命令,可以根据以下说明修改主目录中的初始化文件。
启用读取项目特定的.gdbinit/.lldbinit
GDB
在主目录的~/.gdbinit文件中设置权限。
对于GDB 11.1及更高版本,可以使用~/.config/gdb/gdbinit代替。
在使用WSL时,请编辑位于WSL主目录中的.gdbinit文件,即/home/[user]/.gdbinit。
适用于所有项目
set auto-load local-gdbinit on add-auto-load-safe-path /
这允许调试器读取所有项目的项目特定的初始化文件,其中包括使用命令行GDB并允许它从当前工作目录读取.gdbinit。请注意,这可能会导致执行不受信任的命令。
适用于特定项目
set auto-load local-gdbinit on add-auto-load-safe-path [项目根目录的完整路径]/.gdbinit
LLDB
在主目录的~/.lldbinit文件中设置权限:
settings set target.load-cwd-lldbinit true
这允许调试器读取所有项目的项目特定的初始化文件,其中包括使用命令行GDB并允许它从当前工作目录读取.lldbinit。请注意,这可能会导致执行不受信任的命令。
调整GDB超时值
您可以通过在CLion注册表中设置相应的属性来控制GDB的超时值。
- 按CtrlShift0A或从主菜单中选择帮助 | 查找操作。在打开的弹出窗口中,开始键入
Registry
,选择相应的项目,然后按Enter键。
- 在打开的对话框中,开始键入cidr.debugger.timeout。单击突出显示的字符串的值字段,然后以毫秒为单位输入超时值。
在Windows上配置外部GDB控制台
在早于8.0版本的GDB上的Windows上,用于应用程序的输入/输出使用单独的控制台。对于更新的GDB版本,默认情况下将输出重定向到CLion控制台。但是,您可以切换回打开一个外部输出窗口。
- 按CtrlShift0A或从主菜单中选择帮助 | 查找操作。在打开的弹出窗口中,开始键入
Registry
,选择相应的项目,然后按Enter键。
- 在打开的对话框中,开始键入cidr.debugger.gdb.workaround.windows.forceExternalConsole。单击突出显示的字符串的值字段,然后以毫秒为单位输入超时值。