在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。

在调试器之间切换

  1. 转到设置 | 构建、执行、部署 | 工具链。
  2. 在右侧窗格的调试器字段中,选择当前工具链的调试器:
    1.png

在macOS上,LLDB被设置为默认的调试器。但是,如果您从在Windows或Linux中创建的jar文件中导入了CLion设置,则默认调试器将设置为捆绑或自定义的GDB版本,正如在原系统中定义的那样。

调试器数据视图

在设置 | 构建、执行、部署 | 调试器 | 数据视图 | C/C++ 对话框中,您可以自定义C/C++数据表示。

2.png

在这里,您可以控制标准库类型的呈现、模块名称、函数参数类型和函数模板参数以及其他选项。或者,使用调试工具窗口、框架视图和变量视图中的上下文菜单:

3.png

4.png

STL容器呈现

当您设置启用GNU库呈现器复选框时,这会影响使用gcc编译器时GDB呈现STL容器。对于与GDB一起使用的clang,此选项仅适用于libstdc++

目前,此选项不适用于LLDB。查看LLDB STL格式化程序如何处理LLDB STL格式化程序如下。

LLDB STL格式化程序

以下是LLDB版本9.0的准确列表。

macOS

类型libcxxlibstdc++
字符串支持支持
数组支持支持
向量支持暂不支持
双端队列支持暂不支持
列表支持暂不支持
前向列表支持暂不支持
集合支持暂不支持
映射支持暂不支持
多重集支持暂不支持
多重映射支持暂不支持
无序集合支持暂不支持
无序映射支持暂不支持
无序多重集支持暂不支持
无序多重映射支持暂不支持
支持暂不支持
队列支持暂不支持
优先级队列支持暂不支持

Ubuntu

类型libcxxlibstdc++
字符串支持 if compiled with -fstandalone-debug支持
数组支持支持
向量支持支持
双端队列支持支持
列表支持支持
前向列表支持暂不支持
集合支持支持
映射支持支持
多重集支持支持
多重映射支持支持
无序集合支持暂不支持
无序映射支持暂不支持
无序多重集支持暂不支持
无序多重映射支持暂不支持
支持支持
队列支持支持
优先级队列支持支持

macOS上GDB的STL呈现程序

将GDB用作调试后端并使用Clang(CMake的默认编译器)的组合意味着在macOS上查看STL容器的内容存在一些限制。作为解决方法,可以尝试以下说明。

  1. 使用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++的支持。

  2. 我们还建议您使用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的超时值。

  1. 按CtrlShift0A或从主菜单中选择帮助 | 查找操作。在打开的弹出窗口中,开始键入Registry,选择相应的项目,然后按Enter键。
    5.png
  2. 在打开的对话框中,开始键入cidr.debugger.timeout。单击突出显示的字符串的值字段,然后以毫秒为单位输入超时值。
    6.png

在Windows上配置外部GDB控制台

在早于8.0版本的GDB上的Windows上,用于应用程序的输入/输出使用单独的控制台。对于更新的GDB版本,默认情况下将输出重定向到CLion控制台。但是,您可以切换回打开一个外部输出窗口。

  1. 按CtrlShift0A或从主菜单中选择帮助 | 查找操作。在打开的弹出窗口中,开始键入Registry,选择相应的项目,然后按Enter键。
    7.png
  2. 在打开的对话框中,开始键入cidr.debugger.gdb.workaround.windows.forceExternalConsole。单击突出显示的字符串的值字段,然后以毫秒为单位输入超时值。
    8.png

标签: clion破解, clion破解教程, clion教程, clion基础教程, clion高级教程, clion核心教程, clion免费激活码, clion免费注册码, clion注册码在线生成, clion激活