断点
断点是能够使程序在特定点暂停执行的特殊标记。 这使您能够检查程序的状态和行为。 断点可以是简单的,例如,在达到某行代码时暂停程序,或者涉及更复杂的逻辑,例如检验 附加条件、 写入日志 等等。
一旦设置了断点,除非明确移除,否则它将一直保留在您的项目中, 临时断点除外。
断点类型
在 CLion 中有以下类型的断点:
行断点 :在到达设置断点的代码行时暂停程序。 这种类型的断点可以设置在任何可执行的代码行上。
异常断点 :在抛出指定异常时暂停程序。 它们在任何情况下都适用,不需要特定的源代码引用。
符号断点 :在特定函数或方法被执行时暂停程序。
行断点状态
当调试会话尚未开始时,所有行断点的标记方式相同:

在调试会话期间,CLion 会检测断点状态并相应更改标记:
行断点通过 GDB 或 LLDB 调试器使用提供的调试符号成功解析。 此类断点可以在执行期间命中:

行断点无效,这意味着它无法通过 GDB 或 LLDB 解析,且永远不会被命中。 这可能发生在断点位于可执行代码之外或缺少某些调试符号时。 CLion 能准确检测到此类情况,并动态更新图标(例如,当您加载正确的调试符号时,状态会发生变化)。

设置断点
设置行断点
设置异常断点
按 Ctrl+Shift+F8 或从主菜单中选择 。
在 断点 对话框中,按 Alt+Insert 或单击
,并选择 异常断点 或 JavaScript 异常断点。

设置符号断点
点击 查看断点
,位于 Debug 工具窗口的左侧部分,或按 Ctrl+Shift+F8。
在 断点 对话框中,按 Alt+Insert 或点击
,并选择 符号断点。
指定符号名称,并选择是否希望此断点在所有模块中命中,还是仅在特定模块中命中。

管理断点
移除断点
对于非异常断点:点击装订区域的断点。
对于所有断点:进入主菜单中的 Ctrl+Shift+F8 ,选择该断点,然后单击 移除 或按下 Delete。
为了避免意外删除断点及其参数,您可以选择通过将它们拖到编辑器或点击鼠标中键来删除断点。 为此,请前往 并选择 拖动到编辑器或使用中键点击。 点击断点将 启用或禁用它。
静音断点
如果您暂时不需要在断点处暂停,可以将其 静音。 这使您能够在不离开调试器会话的情况下恢复正常程序操作。 之后,您可以取消静音断点并继续调试。
点击 静音断点 按钮
在 Debug 工具窗口的工具栏中。
启用/禁用断点
当您移除断点时,其 内部配置会丢失。 若要在不丢失断点参数的情况下暂时关闭单个断点,您可以 disable 它:
对于非异常断点:右键点击并根据需要设置 已启用 选项。 或者,按住 Alt 单击断点,或使用中键单击断点,也可以实现此操作。 对于中键,请检查是否已将移除断点功能 分配给它。
对所有断点:点击 运行 | 查看断点 Ctrl+Shift+F8 ,然后在列表中选中/取消选中断点。
移动 / 复制断点
要移动断点,请将其拖到另一行。
要复制断点,请按住 Ctrl 并将断点拖到另一行。 这将在目标位置创建具有相同参数的断点。
查看所有设置的断点
您可以在 书签 工具窗口中查看所有断点的列表。 当您在代码中设置断点后,断点会自动添加到工具窗口中的专用列表中。
在主菜单中,转到 或按 Alt+2 并展开 断点 列表。
配置断点的属性
根据断点类型,您可以配置附加属性,从而使其操作符合特定需求。
基本断点属性可通过意图访问。 将插入符号放在带有断点的行上,然后按 Alt+Enter:

更多断点选项可通过右键点击上下文菜单访问:

点击 更多 或按 Ctrl+Shift+F8 以访问 断点 对话框:

断点属性参考
在本章中,您可以找到有关断点功能的信息。
已启用
取消选中此复选框以暂时禁用断点,而不将其从项目中移除。 禁用的断点将在单步执行期间被 跳过。
您可以配置 CLion 以通过点击启用/禁用断点,而不是完全移除它们。 要执行此操作,请转到 并将 移除断点 选项设置为 拖动到编辑器中或使用鼠标中键点击。
仅使用文件名
选中此复选框时,CLion 使用源文件的基本名称,而不是其绝对路径。 这更接近于您在调试器命令行界面中指定路径的方式。
在调试器无法解析绝对路径的情况下使用此选项:例如,程序是用 -fdebug-prefix-map 编译的,或者在构建二进制文件后源文件被移动到其他位置且缺少所需的路径映射。
断点将仅使用 GDB 或 LLDB 中的文件名设置。 这可能导致断点匹配到多个具有相同名称的文件,因此调试器将在所有这些位置停止。
暂停
指定在断点命中时是否暂停程序执行。
非挂起断点在您需要记录某个表达式而不暂停程序时非常有用(例如,当您需要知道方法被调用的次数时)或在您需要创建一个 触发断点以在触发时启用 依赖断点。
条件
该选项用于指定在每次命中断点时检查的条件。 如果条件计算结果为 true ,则执行所选操作。 否则,断点将被忽略。
表达式的结果取自返回语句。 当没有 return 语句时,结果取自代码的最后一行。
在评估表达式时,请确保您意识到它们可能产生的副作用,因为这些副作用可能会影响程序的行为和结果。
日志选项
当断点被触发时,可将以下内容记录到控制台:
“断点命中”消息(M) :一条类似
Breakpoint reached: HebrewCalendar.cpp:62的日志消息。堆栈跟踪(K) :当前帧的堆栈跟踪。 如果您想在不中断程序执行的情况下检查导致此点的路径,这将非常有用。
求值并记录(E) :任意表达式的结果。
表达式的结果取自返回语句。 当没有 return 语句时,结果取自代码的最后一行,这行代码不必是表达式:文字常量也适用。 这可以用来生成自定义消息或在程序执行时跟踪一些值。
在评估表达式时,请确保您意识到它们可能产生的副作用,因为这些副作用可能会影响程序的行为和结果。
设置日志断点
(可选)如果您想要记录的表达式在编辑器中可见,请选中它。
按住 Shift 并点击边栏。
命中后移除
指定断点在被命中一次后是否应从项目中移除。
抛出/捕获
对于异常断点,您可以选择在异常被抛出、捕获或两种情况下暂停程序。 使用 抛出时 和 捕获时 复选框。
生产力提示
- 使用断点进行调试打印
请使用 非中断 日志断点(在其他调试器中有时称为监视点)代替在您的代码中插入打印语句。 这提供了一种更灵活且集中的方式来处理调试日志消息。
- 更快速地设置日志断点
要设置一个 不断点 日志断点,请按住 Shift 并点击边栏。 这不会暂停程序执行,而是记录一条类似于
Breakpoint reached的消息。 如果您想记录编辑器中面前的某个表达式,请在按住 Shift 并点击装订线之前先选择它。- 添加断点描述
如果您的项目中有许多断点,您可以为这些断点添加描述以便于搜索。 要执行此操作,请右键点击 断点 对话框 Ctrl+Shift+F8 中的一个断点,然后从菜单中选择 编辑说明。 现在当您开始输入断点名称时,它会获得焦点。
- 跳转到源
要从 断点 对话框跳转到设置选定断点的代码行,请按 F4。