【问题标题】:How to step through an entire block of code?如何单步执行整个代码块?
【发布时间】:2009-09-01 23:31:45
【问题描述】:

我希望在设置断点时能够跳过代码的某些部分。例如,我有一个代码块,它迭代 52 次以创建一副纸牌。这工作正常,我宁愿不必按 F11 来继续穿过那个街区。无论如何我可以“跳过”这个,以便调试器继续下一个方法调用?

语言和 IDE 在 VS 2008 中是 C#。

【问题讨论】:

    标签: visual-studio debugging breakpoints


    【解决方案1】:

    执行以下操作

    • 在循环后的第一行右击
    • 选择“运行到光标处”

    这相当于在该行设置断点,像按 F5 一样运行代码,然后在命中后删除断点。

    注意:如果循环代码的执行遇到另一个真正的断点,则执行将停在那里,而不是您单击的位置。如果您认为这可能会发生,只需禁用所有断点,执行上述技巧并重新启用所有断点。

    【讨论】:

    • 你能详细说明一下这应该如何表现吗?我正在尝试它,似乎如果我在带有嵌套 if、while 等的代码块中尝试这个,它实际上并没有移动到光标,而是下一个 if 和/或 while。我有点笨,所以我可能只需要更多的“反复试验”。 :)
    【解决方案2】:

    在你想结束的地方设置另一个断点,然后按 F5 :)

    【讨论】:

    • 有趣...所以如果我设置两个断点,我可以在已经处于调试模式时使用“开始调试”命令跳过它们之间调用的所有代码?
    • 确实可以 :) 虽然在调试中运行时,F5 被称为Continue
    【解决方案3】:

    如果它是一个选项,您可以将该代码移动到一个函数中并将 [DebuggerStepThrough] 属性应用于该函数,以便在调试期间始终跳过它

    像这样:

    using System.Diagnostics;
    
    namespace MyNamespace
    {
        public class Utilities
        {
            [DebuggerStepThrough]
            public ThisIsAVeryLongMethod()
            {
                //
                // Code
                //
            }
        }
    }
    

    现在在您的代码中,当您单步执行时,调试器不会转到该方法,而是继续执行下一行

    ShortMethod1();
    ThisIsAVeryLongMethod();
    ShortMethod2();
    

    【讨论】:

    • 我正要问,但谷歌是我的朋友。我喜欢这个,我认为它对于我现在需要的特定目的效果最好。我无法编辑答案,但有人应该编辑它以解释如何使用 [DebuggerStepThrough] 属性以及您还需要 System.Diagnostics 命名空间这一事实。
    • 它在课堂上也有效吗?在我完成调试后,我想完全跳过课堂上的每个方法,并且我确信它工作正常。
    【解决方案4】:

    我不知道有什么方法可以跳过一个块,但是您可以在该块之后放置一个断点或使用 run-to-cursor(我认为是 ctrl-F10)。

    【讨论】:

      猜你喜欢
      • 2013-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-09
      • 1970-01-01
      • 2021-09-27
      • 2014-01-02
      • 1970-01-01
      相关资源
      最近更新 更多