逐步执行代码
在挂起的程序中,您可以控制程序的执行。 通过逐步执行程序,您可以将执行点推进到您感兴趣的代码,并 检查此时的程序状态。
当代码在调试模式下运行时,有两种方式可以挂起它:
在您想要检查的代码中 设置断点 ,并等待其中一个断点被触发。
使用 Ctrl+D, P 中断程序执行。 调试器将在您暂停时完成当前正在执行的语句,然后停在下一条应该执行的语句上。
在挂起状态下, 当前执行点 (即下一条将被执行的语句)会在编辑器左侧边栏中用黄色执行指针
标记出来。 要快速找到当前执行点,请按 Alt+F10 或单击 显示执行点 中的 调试窗口。
所有的步进命令都可以通过 运行 菜单、快捷键以及 调试窗口 工具栏上的按钮使用:

以下是所有步进命令的简要概述。
命令 | 图标 | 快捷键 | 用它来... |
|---|---|---|---|
F7 | 停在当前行中第一个被调用函数的第一条语句 | ||
Shift+F7 | 如果当前行中有多个调用,可选择一个函数进入 | ||
Shift+F8 | 运行当前函数直到结束,并停在调用者上下文中函数调用后的语句(或途中第一个断点处,如果有的话) | ||
F8 | 执行当前语句及其调用的所有函数,然后在下一条语句前停下(或途中第一个断点处,如果有的话) | ||
Alt+Shift+F8 | 像 步过 一样跳到下一条语句,但同时忽略被调用方法中的所有断点(如果有的话) | ||
Alt+F9 | 恢复程序执行,然后在目标语句前停下(或途中第一个断点处,如果有的话) | ||
Ctrl+Alt+F9 | 像 运行到光标处 一样执行代码直到目标语句,但同时忽略途中所有断点 | ||
| Ctrl+Alt+Shift+F9 | 将目标语句设为下一条要执行的语句,跳过当前和目标语句之间的所有代码 |
要结束调试会话,请按 Ctrl+F2 ,在菜单中选择 ,或单击 停止 调试窗口。
步入
当您需要调试当前行中调用的函数时,可以使用 步入 命令 F7 ,您可以在 运行 菜单和 调试窗口 中找到该命令。
调试器会将执行指针设置为当前行中调用的第一个函数的第一条语句。 如果没有调用函数,调试器将跳到下一条语句。
默认情况下,JetBrains Rider 启用 外部源调试 ,这意味着当您进入库代码时,它会被自动反编译,调试器会将执行点移动到那里。
如果您希望调试器忽略库代码,可以禁用外部源调试——在 JetBrains Rider 设置 的 页面 Ctrl+Alt+S 中清除 启用外部源调试。
智能步入
如果当前行包含多个嵌套调用,JetBrains Rider 允许您选择一个调用进入。 请考虑以下代码行:
该行包含多个调用,如果您使用 步入 ,调试器将首先进入 Bar() 的实现,然后进入 Baz() 的实现,依此类推。
如果您希望选择要进入的调用,例如 Bar() ,您可以使用 智能步入 Shift+F7:

当您选择要进入的函数时,调试器会将执行指针设置为所选函数的第一条语句。
选择器还会显示哪些调用已经执行,并允许您再次执行这些调用。
当您在包含多个方法调用的行中调用 步入 F7 时,可以启用“智能单步进入”行为。 为此,请在 构建、执行、部署 | 调试器 | 单步调试 设置页面 Ctrl+Alt+S 中选择 始终使用智能步入。
步出
如果您不再需要调试某个函数(例如,您刚刚进入的函数),请使用 步出 命令 Shift+F8 ,该命令也可在 运行 菜单和 调试窗口 中使用。
调试器将自行执行函数的剩余行,并将执行指针设置为函数调用后面的语句。
步过
如果您对某个函数的工作原理不感兴趣,可以跳过它(该函数仍会被执行)——使用 步过 命令 F8 ,该命令也可在 运行 菜单和 调试窗口 中使用。
强制步过
如果您要跳过的函数包含断点,调试器将在执行相应语句时停在这些断点上。 您可以使用 强制步过 命令 Alt+Shift+F8 强制调试器跳过调用链中的断点,该命令也可在 运行 菜单和 调试窗口 中使用。
运行到光标处
作为在特定语句设置断点、恢复程序并等待断点被触发的替代方法,您可以使用 运行到光标处 命令 Alt+F9 直接让调试器运行到该语句,该命令也可在 运行 菜单和 调试窗口 中使用。
您还可以将鼠标悬停在目标语句上,然后选择相应的操作:

不间断运行到光标处
如果当前执行点和目标语句之间有断点,您可以使用 不间断运行到光标处 命令 Ctrl+Alt+F9 强制调试器跳过这些断点,该命令也可在 运行 菜单和 调试窗口 中使用。
跳到光标
与其运行程序直到目标语句,您可能希望跳过一部分代码而不实际执行它(例如,避免已知的错误或不重复某些例行操作)。 您可以使用 跳到光标
命令 Ctrl+Alt+Shift+F9 实现这一点,该命令也可在 运行 菜单和 调试窗口 中使用。
您还可以通过用鼠标拖动执行指针
并将其放到目标行来跳过程序的一部分:

您还可以将鼠标悬停在目标语句上,然后选择相应的操作:

跳到另一条语句时,请记住以下几点:
旧的执行点和新的执行点之间的语句不会被执行。
您可以跳回到已经执行过的语句。 在这种情况下,已经执行的语句不会被撤销。
无法在另一个函数中设置下一条语句。
步进时间
当您逐步执行代码或让程序在断点之间执行时,JetBrains Rider 会可视化显示自上次暂停以来经过的时间:

时间计算从上一次调试器暂停开始,这可能是上一个断点、上一次逐步执行命令的目标位置,或 显式调试器暂停。
当启用 动态程序分析 (DPA) 时,JetBrains Rider 在计算经过时间时会使用 Windows 事件跟踪 (ETW) 事件,否则会使用调试器 API。 使用 DPA 的计算更为精确。