断点
断点允许您在特定语句处暂停程序执行,然后 分析变量值 、调用堆栈和其他程序参数, 评估表达式 ,以及 逐步执行程序。 在 JetBrains Rider 中,您可以使用以下类型的断点:
行断点 ,您可以在代码中的特定语句处设置。 调试器在执行到达此行时暂停程序执行。 行断点只能设置在可执行行上——注释、声明和空行不是行断点的有效位置。
异常断点在指定异常抛出时暂停程序。 与需要特定源引用的行断点不同,异常断点是全局适用的。
方法断点在每次调用指定方法时暂停程序。 与 异常断点类似,方法断点不会显示在编辑器中,而仅在 断点对话框 (Ctrl+Shift+F8 或 )中可见和可配置。
数据断点在特定对象的标记属性发生更改时暂停程序执行。 当您观察到值的变化并想弄清楚是哪段代码实际导致了变化时,数据断点非常有用。
您可以在 开始调试程序之前设置断点,也可以在程序已经在调试器控制下运行时(即处于调试模式)设置断点。 所有断点都会被保存,并且在重新启动 JetBrains Rider 后不会丢失。
要查看当前解决方案中的所有断点,请使用 断点对话框 (Ctrl+Shift+F8 或 )。 对于列表中的每个单独断点,您可以根据需要查看和更改其属性。
行断点
设置行断点
将插入符号放在您希望暂停程序执行的语句处,然后执行以下操作之一:
按下 Ctrl+F8。
在主菜单中,进入 运行 | 切换断点 | 行断点.
单击您希望切换断点的行的左侧边距区域。 默认情况下,JetBrains Rider 设置 Ctrl+Alt+S 的 页面上已启用 鼠标悬停时显示断点预览 选项,因此当您将鼠标悬停在允许设置断点的行上时,会看到预览图标:

最初,断点在左侧边距
中以填充的红色圆圈表示。 设置断点的代码行会被高亮显示。 在您开始调试后,有效的断点会以绿色对勾标记
,并且程序执行将在此代码行执行 之前停止。

您可以选择暂时禁用断点,而无需实际移除它。 禁用的断点显示为空的红色圆圈
。
禁用/启用行断点
按住 Alt ,单击左侧边距中相应的断点图标。
使用中键单击断点。
右键单击断点并清除 已启用 选项。
在 断点对话框 (Ctrl+Shift+F8 或 )中,使用断点旁边的复选框或断点属性中的 已启用 标志。
禁用/启用所有行断点
在 调试窗口 中,单击 忽略断点
。 在静音状态下,编辑器中的所有断点都以实心灰色显示
。
行断点状态
状态 | 图标 | 描述 |
|---|---|---|
已启用 |
| 行断点. 在设计时显示 |
条件 |
| 条件行断点。 仅当满足特定条件时,断点才会被命中。 在设计时显示。 |
已禁用 |
| 已禁用的断点不会中断程序执行。 如果您希望将来启用并使用断点,您可能希望禁用断点而不是移除它。 |
多种 |
| 在该行中切换了几个 内联断点。 |
依赖禁用 |
| 依赖行断点。 依赖断点只有在其依赖的断点被命中后才会启用。 |
跟踪点 |
| 如果断点未暂停程序执行(断点属性中的 挂起 标志被禁用),它实际上会变成一个 跟踪点 ,您可以在程序到达标记的代码行时 记录程序状态。 |
有效 |
| 在运行时显示,当调试器识别断点设置在可执行代码行上时。 |
无效 |
| 当断点设置在不可执行的行上时显示,表明该断点不会被命中。 例如,如果您没有调试程序的正确 PDB 文件,断点可能会变为无效。 |
静音 | 当所有断点被暂时禁用(静音)时显示。 您可以通过单击 忽略断点 |
移除行断点
在编辑器中,找到要移除的行断点所在的行,并单击其左侧边距的图标。
将插入符号放在所需的行上,然后按 Ctrl+F8。
在 断点对话框 (Ctrl+Shift+F8 或 )中,选择所需的断点并单击 移除
。
移除断点后,您可以通过按 Ctrl+F8 或单击边距区域再次切换它。 但是,如果您以某种方式配置了断点,例如指定了 条件 ,您可能希望恢复断点的先前状态,而不是切换一个新的断点。
恢复已移除的断点
请选择 从主菜单。
默认情况下,恢复断点的操作没有快捷键,但如果您经常使用它,可以为此操作 分配一个自定义快捷键。
如果您需要一个仅工作一次的断点,可以使用专用命令设置一个临时断点,或者将任何行、方法或异常断点设为临时断点。 当命中时,此类断点会立即被移除。
设置临时行断点
将插入符号放在您希望暂停执行的语句处。
请执行以下操作之一:
按下 Ctrl+Alt+Shift+F8。
在主菜单中,进入 运行 | 切换断点 | 临时行断点.
或者,在 断点对话框 (Ctrl+Shift+F8 或 )中选择所需的断点,选择所需的行断点,并使用断点属性中的 命中后移除 标志。
多语句行中的内联断点
如果一行包含多个语句,您可以分别为每个语句切换断点。
切换内联断点
将插入符号放在您想标记的语句内,然后按 Ctrl+F8。
单击对应行旁边的边距区域。 根据行中语句的排列方式,IDE 将为嵌套语句或行中的第一个独立语句切换断点。
该行中的所有其他语句将显示带有断点装饰的标记,您可以单击这些标记以根据需要切换断点:

当调试器在内联断点处暂停程序执行时,相应的语句会被高亮显示:

如果您在一行中切换了多个内联断点,边距将为该行显示一个多个断点图标
。 如果您单击此图标,该行中的所有断点将被移除。
条件行断点
调试器允许您设置一个条件,只有在满足该条件时,特定断点才会被命中。 例如,如果您想查看程序在变量取某个值时的行为,这可能会很有帮助。
为行断点设置条件
请执行以下操作之一:
右键单击左侧边距中相应的断点图标。
在 断点对话框 (Ctrl+Shift+F8 或 )中,选择所需的行断点并选择 条件 标志。
输入一个使用上下文中可用变量的表达式,并将其计算为
true或false。 按 Shift+Enter 打开多行编辑器。
如果表达式计算为 true ,则命中断点。 例如,在下面的示例中,只有当 result > 10 时,断点才会被命中。

对于简单条件,当您只需要在断点被命中一定次数后触发断点(例如,断点位于循环中)时,您可以单击 更多 并配置 命中数 属性。 在下面的示例中,程序将在每次断点命中为 2 的倍数时暂停,即 2、4、6、8 等。

依赖断点
在一些复杂的调试情况下(例如,调试多线程应用程序),在某个断点暂停可能没有意义,直到其他断点被命中。 为此,调试器允许您创建依赖断点。
设置当前断点所依赖的断点
请执行以下操作之一:
右键单击左侧边距中相应的断点图标,然后在打开的断点属性中单击 更多。
在 断点对话框 (Ctrl+Shift+F8 或 )中,选择所需的断点。
在 禁用直到命中选定断点 (Disabled until selected breakpoint is hit) 中,选择当前断点所依赖的断点。
在 断点命中后 中,选择
再次禁用 以在所选断点被命中后禁用当前断点。
保持启用 以在所选断点被命中后保持当前断点启用。
用于记录程序状态的跟踪点
有时,您可能需要在特定的执行点评估一个表达式并记录结果或记录断点被命中的事实。 通常,您不需要为每个日志条目暂停程序执行。
为此,JetBrains Rider 允许您将任何行、方法或异常断点转换为跟踪点。 跟踪点消息将记录到调试输出(调试输出 选项卡的 调试窗口 中)。
在跟踪点记录程序状态
设置断点 Ctrl+F8 在所需语句处或选择现有断点之一。
请执行以下操作之一:
右键单击断点,然后在断点属性中单击 更多。
在 断点对话框 (Ctrl+Shift+F8 或 )中,选择所需的断点。
清除 挂起 复选框以将其设为跟踪点。 当然,这是可选的。 如果您希望既在断点处停止又记录其命中,请保持复选框选中。
选择您希望如何记录断点命中——“断点命中”消息、此时程序的堆栈跟踪,或两者兼有。
对于行断点,您还可以评估任何表达式并记录其结果——选择 评估并记录 并输入所需的表达式。
您可以使用范围内可用的任何变量、类及其方法。 要向输出添加说明性文本,请使用
String.Format()或字符串连接。如有必要,按 Shift+Enter 打开多行编辑器。
例如,像这样的表达式:

将以下结果打印到 调试输出 选项卡:

断点标签
在 断点对话框 (Ctrl+Shift+F8 或 )中,您可以为断点添加名称或简短描述:右键单击断点,从上下文菜单中选择 ,然后输入所需的名称/描述。
您可以使用这些标签查看特定断点的用途,也可以在对话框中开始输入以搜索带标签的断点:

断点组
在 断点对话框中,您可以将断点组织到一个组中,例如,用于标记特定问题的断点。 创建组后,您可以将断点移入或移出组,并一次性启用/禁用组中的所有断点。

创建断点组
打开 断点对话框 (Ctrl+Shift+F8 或 )。
选择您感兴趣的断点。 要选择多个断点,请在选择断点时按住 Ctrl 键。
右键单击所选内容,并从上下文菜单中选择 移动到组 | 创建新组...。
在 新建组 对话框中,输入新组的名称。 所选断点移动到新创建的组中。
可选地,您可以右键单击一组断点并选择 设为默认。 之后,所有新创建的断点将自动添加到此组。
可选地,您可以选中或清除组复选框以启用/禁用组内的所有断点。
创建组后,您可以通过右键单击并在上下文菜单中选择 移动到组 将其他断点移动到该组。
要将断点移出组,请右键单击它并选择 移动到组 | [组名] 或 移动到组 | <无组>。 一旦最后一个断点被移出组,该组将被移除。
要移除一个组及其所有断点,请在选择该组时单击 移除 。
线程特定断点
调试多线程应用程序可能具有挑战性:每当您继续执行时,下次断点被命中时,您可能会在另一个线程上。 为了专注于调试特定线程,您可以使任何断点特定于线程。
默认情况下,任何断点都会独立于命中它的线程暂停程序执行。
使断点特定于线程
方法断点
方法断点将在每次调用指定方法时暂停程序。 与 异常断点类似,方法断点不会显示在编辑器中,而仅在 断点对话框 (Ctrl+Shift+F8 或 )中可见和可配置。
添加方法断点
打开 断点对话框 (Ctrl+Shift+F8 或 )。
点击
并选择 方法断点。
在打开的对话框中,指定类型的完全限定名称(
Namespace.TypeName)和方法名称,然后单击 确定。
数据断点
数据断点允许您在特定对象的标记属性发生更改时暂停程序执行。 当您观察到值的变化并想弄清楚是哪段代码实际导致了变化时,数据断点非常有用。
与其他类型的断点不同,数据断点适用于特定调试会话中的对象,因此它们仅在 调试窗口 Alt+5 会话期间可用。
使用数据断点
以下简短视频展示了如何设置和使用数据断点:
