2025年vsz(vs怎么调试)

vsz(vs怎么调试)div id module unit notification container hidden div p 现在是时候实践你新获得的调试知识了 这是你工作的第一天 现在可以通过修复公司旗舰产品 斐波那契计算器 中的 bug 来施展 NET 调试技能了 p 若要设置

大家好,我是讯享网,很高兴认识大家。



 <div id="module-unit-notification-container" hidden=""></div> <p>现在是时候实践你新获得的调试知识了。 这是你工作的第一天,现在可以通过修复公司旗舰产品(斐波那契计算器)中的 bug 来施展 .NET 调试技能了。</p> 

讯享网

若要设置 Visual Studio 以进行 .NET 调试,首先需要一个 .NET 项目。 Visual Studio 提供了许多初学者模板,使创建新项目变得容易。

  1. 在 Visual Studio 中,选择“文件”>“新建”>“项目”。
  2. 在“创建新项目”对话框中,选择“控制台应用”,然后选择“下一步”。
  3. 将项目命名为 DotNetDebugging,然后选择要保存的位置。 将其他值保留为默认值,然后选择“下一步”。
  4. 在最终屏幕上单击“创建”。

Visual Studio 使用所选模板为我们创建控制台项目。 加载项目后,通过选择它来打开 Program.cs。

我们的当前项目向控制台编写了“Hello World”消息,并没有太多内容需要调试。 相反,你将使用简短的 .NET 程序来计算第 N 号斐波那契数列。

斐波纳契数列是一组以数字 0 和 1 开头的数字,后面的每个数字都是前两个数字的和。 序列以此类推,如下所示:

讯享网

下面的示例代码包含一个 bug,因此让我们使用 Visual Studio 的调试工具来诊断并解决问题。

  1. 将 Program.cs 的内容替换为以下代码:
 
  1. 对于 Windows 和 Linux,通过“Ctrl+S”来保存该文件。 对于 Mac,请选择“Cmd+S”。
  2. 让我们来看看已更新的代码在调试之前是如何工作的。 通过按 Visual Studio 顶部的绿色开始按钮来运行程序。
  3. 在调试控制台输出的末尾,你会看到程序将 3 写入控制台,并存在代码 0。 通常,程序退出代码 0 表示程序已运行并退出且不崩溃。 但是,崩溃和返回正确的值之间存在差异。

在这种情况下,我们要求程序计算斐波那契数列的第 5 个值:

讯享网

此列表中的第 5 个值为 5,但我们的程序返回了 3。 让我们使用调试器来诊断和解决此错误。

  1. 通过单击 上第 1 行的左边距来添加断点。
  2. 再次开始调试。 程序开始执行。 由于你设置了断点,因此程序会在第 1 行中断(暂停执行)。 使用调试器控件单步执行 函数。

现在,使用“本地”窗口检查不同变量的值。


讯享网

  • 为 参数显示的值是什么?
  • 函数执行开始时,局部变量 、 和 的值分别是什么?
  1. 接下来,我们将使用“单步跳过”调试器控件前进到 循环。

  2. 在所读取的行上继续前进,直至到达 循环内的第一行:
     

调试的一个重要部分是,停下来并对你认为代码的某些部分(函数和块,如循环)正在尝试执行的操作做出一些明智的猜想。 你不确定也没关系,这就是调试过程的一部分。 但主动参与调试过程会有助于更快地找到 bug。

在深入了解之前,让我们记住斐波纳契数列是一组以数字 0 和 1 开头的数字,后面的每个数字都是前两个数字的和。

这意味着:

讯享网

了解该定义并查看此 循环,我们可以推断出:

  1. 该循环从 2 计数到 (我们要查找的斐波纳契数列号)。
  2. 如果 小于 2,则循环将永不运行。 如果 为 0,则函数末尾的 语句将返回 0;如果 为 1 或 2,则返回 1。 根据定义,这是斐波纳契数列中的第 0 个、第 1 个和第 2 个值。
  3. 更有趣的情况是当 大于 2 时。 在这些情况下,当前值定义为前两个值的和。 因此,对于此循环, 和 是前两个值, 是当前迭代的值。 因此,每次计算出前两个值的和并将其设置为 时,我们都会更新 和 值。

好了,除此之外,我们不需要过多考虑。 我们可以依靠调试器完成一些操作。 但有必要考虑一下代码,看看它是否会执行预期的操作,如果未执行,则需要获取更多最新信息。

单步执行代码可能非常有用,但却很繁琐。 使用循环或其他重复调用的代码时尤为如此。 我们可以在循环的第一行上设置新断点,而不是反复单步执行循环。

使用策略放置断点非常重要。 我们对 特别感兴趣,因为它表示当前最大斐波那契值。 因此,让我们在设置 后在行上放置断点。

  1. 在第 14 行上添加第二个断点。

  2. 现在,在循环中设置好断点后,使用“继续”调试器控件前进,直至到达该断点。 查看本地变量,将看到以下几行内容:
     

    这些行看似都正确。 第一次单步执行循环时,前两个值的 为 1。 我们可以利用断点,从而在下次单步执行循环时跳至该断点,而不是逐行单步执行。

  3. 选择“继续”以继续执行程序流,直至到达下一个断点,该断点将在下一次循环中出现。

    这一次,我们看到了以下值:

    讯享网

    这些值是否仍有意义? 看起来像是有。 对于第三个斐波纳契数,我们预计将看到 等于 2,实际上的确如此。

  4. 选择“继续”再次循环。
     

    结果正确。 数列中的第 4 个值应为 3。

  5. 此时,你可能会想知道此代码是否一直是正确的,并且想象一下 bug! 让我们在循环中最后一次继续这样做。 再次选择“继续”。

    程序已完成运行并打印出 3! 错误。

    现在,我们知道代码会一直正确运行循环,直到 等于 4,但随后会在计算最终值之前退出。 我们已缩小 bug 的位置范围。

  6. 让我们在第 18 行上再设置一个断点,显示如下:
    讯享网

    通过此断点,我们可以在函数退出前检查程序状态。 我们已了解到我们有望从第 1 行和第 13 行上的先前断点获得的所有内容,因此可以将其清除。

  7. 删除第 1 行和第 13 行上的先前断点。 在行号旁边的空白处单击断点,或者在左下角的“断点”窗格中清除第 1 行和第 13 行的断点复选框。

    现在,我们能够更好地了解发生的情况,并设置旨在捕获行为异常时的程序的断点,我们应该能够捕获此 bug!

  8. 最后一次启动调试器。
     

    我们特别要求提供 Fibonacci(5),而我们得到的是不正确的 Fibonacci(4)。 此函数返回 ,每个循环迭代计算 值并将 设置为等于 。

    根据此信息以及以前的调试运行,我们可以看到,该循环在 为 4(而不是 5)时退出。

    让我们再仔细看看 循环的第一行。

    讯享网

    一旦 for 循环的顶部看到 等于 ,它将立即退出。 这表示,如果 等于 ,循环代码将无法运行。 我们想要的似乎是在 之前运行,而不是:

     

    因此进行上述更改后,更新的程序应类似以下示例:

    讯享网
  9. 停止调试会话(如果尚未这样做)。
  10. 对第 11 行进行前面的更改,并将断点保留在第 18 行上。
  11. 重启调试程序。 这一次,当我们到达第 18 行上的断点时,将看到以下值:
     

    喂! 看起来我们做到了! 很好,你已保挽救了 Fibonacci, Inc. 的一天!

  12. 选择“继续”,只是为了确保程序返回正确的值。
    讯享网

    这样会返回正确的输出。

你成功了! 你使用 Visual Studio 中的 .NET 调试器调试了你并未编写的某些代码。

在下一单元中,你将了解如何使用内置于 .NET 中的日志记录和跟踪功能,使编写的代码更易于调试。

小讯
上一篇 2025-04-15 07:04
下一篇 2025-05-16 08:09

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/168574.html