TOC

This article is currently in the process of being translated into Chinese (~75% done).

Debugging:

Stepping through the code

本章详细介绍单步执行代码,这是调试过程中的另一个重点。以如下简单程序作为讲解示例:

namespace DebugTest
{
    class Program
    {
        static void Main(string[] args)
        {
            int a = 5;
            a = a * 2;
            a = a - 3;
            a = a * 6;
            Console.WriteLine(a);
        }
    }
}

此示例简单地对变量“a”进行几次操作,然后输出最终结果。试着象上一章介绍的那样在使用(定义)a变量的第一行设置一个断点。运行程序。程序执行中断时可以把鼠标悬停在变量a上面,以确认上一章学到的知识:变量此时只含有默认值,因为赋值(即5)操作尚未执行。继续,从调试菜单中选择“单步执行(Step opve)”选项,或使用更方便的方式按快捷键F10。程序的执行推进到下一个相关代码行,再把鼠标悬停在变量a上面,会发现它已经有值了。继续试,此值会随着程序执行一行一行地推进而变化,直到结束。

当然,这是很基础的操作,但也很有用,一旦开始写稍微复杂一点的程序就能体会到这一点。此例中,代码执行流程很简单,仅限于单一方法内部,但是当代码开始扩散到多个类和/或方法中会怎么样呢?试试这个例子:

namespace DebugTest
{
    class Program
    {
        static void Main(string[] args)
        {
            int a = 5;
            int b = 2;
            int result = MakeComplicatedCalculation(a, b);
            Console.WriteLine(result);
        }

        static int MakeComplicatedCalculation(int a, int b)
        {
            return a * b;
        }
    }
}

在Main方法的第一行代码处设置一个断点,然后运行程序。使用“单步执行(Step over)”功能一行一行地执行代码。结果,单步执行直接跳过了方法调用,完全没有提示 - 这就是调试的工作模式。从头再试一次,在到达MakeComplicatedCalculation()调用那一行时,选择调试->单步深入执行(Step into),或使用快捷键F11。调试器就会单步执行进入那一行代码中可能的第一个被调用方法,从而对该被调用方法进行单步执行调试。可以想见,这允许对复杂的代码模块进行单步调试,并只需单步进入相关的方法调用。

如果单步执行进入了一个方法后想回到上一级执行环境,使用调试菜单中对应的选项,“单步执行离开(Step out)”(快捷键为Shift+F11)。这会让程序的单步执行回到上一级环境,表示想单步执行进入多少方法调用都可以,并随时可以通过“单步执行离开(Step out)”回到上一级。


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!