Visual Studio 调试器中的断点入门
在开发人员的工具箱中,断点是最重要的调试技术之一。 在想要暂停调试器执行的位置设置断点。 例如,你可能想要查看代码变量的状态,或者查看特定断点处的调用堆栈。
在源代码中设置断点
可以在任何可执行代码行上设置断点。 例如,查看创建简单循环的这一简单 C# 代码。
int testInt = 3;
for (int i = 0; i < 10; i++)
{
testInt += i;
}
可以使用变量赋值(int testInt = 3
)、for
循环或 for
循环中的任何代码在代码行上设置断点。 如果没有赋值且没有 getter/setter,则不能对方法签名、命名空间或类的声明或变量声明设置断点。
在源代码中设置断点:
- 单击代码行最左边的边距。 你还可以选择行并按“F9”,选择“调试”>“切换断点”,或者右键单击并选择“断点”>“插入断点”。 断点显示为左边距中的红点。
对于大多数语言(包括 C#),Visual Studio 会自动突出显示断点和当前执行的代码行。 对于某些语言(如默认情况下未突出显示的C++),可以通过选择 “工具”(或“调试”)来启用断点和当前行的突出显示,>选项>调试>突出显示断点和当前语句的整个源行(仅C++)。
若要调试,请按 F5,或选择“调试”>“开始调试”。
调试时,在执行断点所在行上的代码之前,执行会在断点处暂停。 断点符号显示黄色箭头。
在以下示例中的断点处,testInt
的值仍为 3。 因此,由于变量已初始化(设置为值 3),因此该值尚未更改,因为黄色语句尚未执行。
在以下示例中的断点处,testInt
的值仍为 1。 因此,由于变量已初始化(设置为值 1),因此该值尚未更改,因为黄色语句尚未执行。
当调试器在断点处停止时,可以查看应用的当前状态,包括 变量值 和 调用堆栈。
例如,在下图中,你可以在数据提示和“局部变量”窗口中看到 testInt
的值。
下面是关于使用断点的一些常规说明。
断点是一个开关。 你可以单击它,按 F9,或使用“调试”>“切换断点”来删除或重新插入该断点。
若要禁用断点而不删除断点,请将鼠标悬停或右键单击它,然后选择 禁用断点。 禁用的断点在左边距或“断点”窗口中显示为空心圆点。 若要重新启用断点,请将鼠标悬停或右键单击它,然后选择启用断点。
设置条件和操作、添加和编辑标签,或导出断点,方法是通过右键单击断点并选择相应的命令,或将鼠标悬停在其上并选择 设置 图标。
断点的类型
Visual Studio 支持不同类型的断点来支持不同的调试方案,例如仅根据指定条件激活的条件断点。 有关详细信息,请参阅使用正确的断点类型。
在“断点”窗口中管理断点
可以使用 断点 窗口查看和管理解决方案中的所有断点。 这种集中的位置在大型解决方案或依赖关键断点的复杂调试场景中尤为有用。
在“断点”窗口中,可以搜索、排列、筛选、启用/禁用或删除断点。 还可以设置条件和操作,或者添加新的函数或数据断点。
若要打开 断点 窗口,请选择 调试>Windows>断点,或按 Ctrl+Alt+B。
若要选择要在“断点”窗口中显示的列,请选择“显示列”。 选择列标题以按该列对断点列表进行排序。
断点标签
可以使用标签在 断点 窗口中对断点列表进行排序和筛选。
- 若要向断点添加标签,请在源代码或“断点”窗口中右键单击断点,然后选择“编辑标签”。 添加新标签或选择现有标签,然后选择“确定”。
- 通过选择“标签”、“条件”或其他列标题,在“断点”窗口中对断点列表进行排序。 可以通过选择工具栏中的“显示列”来选择要显示的列。
断点组
对于复杂的调试方案,可能需要创建断点组来组织断点。 这样,可以根据尝试调试的当前方案快速启用和禁用断点的逻辑分组。
可以在“断点”窗口中,通过选择“新建”>“断点组”并为该组提供名称,创建断点。 若要向组添加断点,请右键单击断点并选择“添加到断点组><组名称>”。 或者,将断点拖放到所需的组中。
若要设置默认断点组,请右键单击某个组,然后选择 设置为默认断点组。 设置默认断点组时,新创建的断点会自动添加到该组。
导出和导入断点
若要保存或共享断点的状态和位置,可以导出或导入它们。
从 Visual Studio 2022 版本 17.12 预览版 3 开始,断点组也包含在导出和导入的断点中。
- 若要将单个断点导出到 XML 文件,请在源代码或 断点 窗口中右键单击断点,选择 导出 或 导出所选。 选择导出位置,然后选择 保存。 默认位置是解决方案文件夹。
- 若要导出多个断点,请在 断点 窗口中,选择断点旁边的框,或在 搜索 字段中输入搜索条件。 选择“导出与当前搜索条件匹配的所有断点”图标,然后保存文件。
- 若要导出所有断点,请取消选中所有框并将“搜索”字段留空。 选择“导出与当前搜索条件匹配的所有断点”图标,然后保存文件。
- 若要导入断点,请在“断点”窗口中选择“从文件导入断点”图标,导航到 XML 文件位置,然后选择“打开”。
从调试器窗口设置断点
您还可以从 调用堆栈 和 反汇编 的调试器窗口中设置断点。
在“调用堆栈”窗口中设置断点
若要在调用函数返回的指令或行处中断,可以在 调用堆栈 窗口中设置断点。
若要在“调用堆栈”窗口中设置断点:
若要打开“调用堆栈”窗口,必须在调试期间暂停。 选择“调试”>“窗口”>“调用堆栈”,或按 Ctrl+Alt+C。
在 调用堆栈 窗口中,右键单击调用函数并选择“断点>插入断点,或按 F9。
断点符号显示在调用堆栈左边距中的函数调用名称旁。
调用堆栈断点以地址的形式出现在 断点 窗口中,其内存位置对应于函数中的下一个可执行指令。
调试器在指令处中断。
有关调用堆栈的详细信息,请参阅 如何:使用“调用堆栈”窗口。
若要在代码执行过程中直观跟踪断点,请在调试时查看调用堆栈中的 映射方法。
在“反汇编”窗口中设置断点
若要打开“反汇编”窗口,必须在调试期间暂停。 选择“调试”>“窗口”>“反汇编”,或按 Ctrl+Alt+D。
在“反汇编”窗口中,单击要中断的指令的左边距。 也可以选择它,然后按 F9,或右键单击并选择 断点>插入断点。