练习 - 设置断点
在调试过程暂停执行期间使用断点。 这样,便可以跟踪变量并检查代码的执行顺序。 断点是启动调试过程的好方法。
设置断点
在本模块的前面,你已完成了在调试器中运行应用程序的练习。 应用程序在“调试控制台”面板中显示“问候消息”。 练习结束时,你注意到代码以意外的方式重复安德鲁的问候。
在本练习中,你将使用断点来帮助识别问题。
确保Program.cs文件包含以下代码示例:
/* This code uses a names array and corresponding methods to display greeting messages */ string[] names = new string[] { "Sophia", "Andrew", "AllGreetings" }; string messageText = ""; foreach (string name in names) { if (name == "Sophia") messageText = SophiaMessage(); else if (name == "Andrew") messageText = AndrewMessage(); else if (name == "AllGreetings") messageText = SophiaMessage(); messageText = messageText + "\n\r" + AndrewMessage(); Console.WriteLine(messageText + "\n\r"); } bool pauseCode = true; while (pauseCode == true); static string SophiaMessage() { return "Hello, my name is Sophia."; } static string AndrewMessage() { return "Hi, my name is Andrew. Good to meet you."; }使用 Visual Studio Code 调试器工具在循环中的
foreach第一个代码行上设置断点。
小窍门
打开/关闭断点的一个简单方法是选择(左键单击)行号左侧的区域。 还可以使用
Run菜单和键盘快捷方式设置断点。在“运行”菜单上,选择“开始调试”。
请注意,代码执行在断点处暂停,并且当前代码行在编辑器中突出显示。

在“调试控件”工具栏上,选择“单步执行”。
可以将鼠标指针悬停在 调试控件 工具栏上的按钮上以显示按钮标签。
请注意,代码执行会前进到以下代码行并暂停:
messageText = SophiaMessage();此代码行将方法的
SophiaMessage返回值分配给字符串变量messageText。花点时间考虑为什么选择 进入 会产生此结果。
- “单步跳入”按钮用于前进到下一个可执行语句。
- 由于
names数组的第一个元素是Sophia,并且if语句正在检查Sophia,因此表达式计算结果为true,代码执行将移动到语句的代码块if中。
在“调试控件”工具栏上,选择“单步执行”。
请留意,代码执行将前进到
SophiaMessage方法并暂停。“单步执行”按钮已转到下一个可执行代码行。 下一个可执行代码行不是文件中的下一行号,它是执行路径中的下一个语句。 在这种情况下,下一个可执行语句是该方法的
SophiaMessage入口点。在 “调试控件 ”工具栏上,选择“ 单步退出”。
请注意,代码执行将返回到调用
SophiaMessage该方法并暂停的代码行。花点时间想想为什么选择单步退出会产生这个结果。
在方法内部时, “单步退出 ”按钮将完成当前方法的剩余行,然后返回到调用该方法的执行上下文。
在“调试控件”工具栏上,选择“单步执行”。
请注意,代码执行会前进到以下代码行并暂停:
messageText = messageText + "\n\r" + AndrewMessage();请花点时间考虑为什么执行会到达此代码行。
虽然代码缩进意味着此代码行是语句的代码块
else if的一部分,但它不是。 使用大括号{}定义此if - else if结构的代码块有助于避免此 bug。 编写代码后,每次循环迭代时,都会将 Andrew 的消息添加到messageText。
验证代码更新
在代码中隔离问题后,应更新代码,然后验证问题是否已修复。
在 “调试控件 ”工具栏上,选择“ 停止”。
请花一分钟时间修复代码逻辑。
有一些选项可用于修复代码中标识的问题。 例如:
可以保留现有代码行,并将大括号
{}添加到if每个代码块的结构中。可以合并最后
else if一个语句后面的两个代码行,形成一个语句,如下所示:else if (name == "AllGreetings") messageText = SophiaMessage() + "\n\r" + AndrewMessage();
无论哪种方式,更新后的代码都必须在
name == "AllGreetings"时在代码块中包含对AndrewMessage的调用。在“文件”菜单上,选择“保存”。
使用调试器 UI 工具清除之前设置的断点。
在“运行”菜单上,选择“开始调试”。
验证代码现在是否生成了预期结果。
Hello, my name is Sophia. Hi, my name is Andrew. Good to meet you. Hello, my name is Sophia. Hi, my name is Andrew. Good to meet you.在 “调试控件 ”工具栏上,选择“ 停止”。
祝贺! 你已成功使用 Visual Studio Code 调试器来帮助你隔离和更正逻辑问题。
回顾
在本单元中,应谨记以下几个重要事项:
- 使用断点在调试会话期间暂停代码执行。
- 使用“调试控件”工具栏中的“单步进入”来观察下一个可执行的代码行。
- 使用调试控件工具栏中的步出来前进通过当前方法并返回到调用该方法的代码行。