掌握VS2010调试 -- 入门指南

本文是Visual Studio 2010调试的全面指南,涵盖启动调试、断点使用、条件断点、数据便签、监视窗口、多线程与并行调试、IntelliTrace等功能。通过实例和快捷键介绍,帮助开发者提升调试效率。
摘要由CSDN通过智能技术生成

1 导言

在软件开发周期中,测试和修正缺陷(defect,defect与bug的区别:Bug是缺陷的一种表现形式,而一个缺陷是可以引起多种Bug的)的时间远多于写代码的时间。通常,debug是指发现缺陷并改正的过程。修正缺陷紧随debug之后,或者说二者是相关的。如果代码中存在缺陷,我们首先要识别造成缺陷的根本原因(root cause),这个过程就称作调试(debugging)。找到根本原因后,就可以修正缺陷。

那么如何调试代码呢?Visual Studio提供了很多用于调试的工具。有时调试需要花费大量时间去识别root cause。VS提供了许多辅助调试的便捷的工具。调试器(Debugger)包含错误列表、添加断点、可视化的程序流程、控制执行流程、Data Tips、监视窗口(watch windows)、多线程调试、线程窗口、并行调试概览以及IntelliTrace调试概览。我希望本文能够对调试功能的使用者有所裨益。请注意,本文使用VS2010。某些功能在旧版本中也是一致的,但是VS2010新增了许多features(Labeling breakpoint, Pinned DataTip, Multithreaded Debugging, Parallel debugging and IntelliTrace)。

2 如何启动调试?

可以通过VS的调试(Debug)菜单启动调试。点击调试菜单下的“启动调试”或者按F5键启动。如果你已经在代码中加入了断点,那么执行会自动开始。


图 启动调试(Start Debugging)

“附加到进程(Attach to Process)”是另一种启动调试的方法。Attach Process会为应用程序启动一个调试会话。可能我们更熟悉ASP.NET Web应用的Attach Process调试。我发了另外两篇相关的帖子。如下:

通常我们通过在可能存在问题代码处加断点来启动调试。因此,我们从断点开始讲起。

3 断点(Breakpoints)

断点用于通知调试器何时何处暂停程序的执行。通过点击左边栏或者按F9键在当前行添加断点。在加断点之前,你需要知道你的代码将会出现什么错误,在什么地方停止执行。当调试器执行到断点处时,你可以使用其他的调试工具核对代码何处出现错误。


图 设置断点(Set Breakpoint)

3.1 使用断点进行调试

你已经在你想要暂停执行的地方设置了断点。现在按F5键启动调试,当程序执行到断点处时,自动暂停执行。此时你有多种方式来检查代码。命中断点(hit the breakpoint)后,加断点的行变为黄色,意指下一步将执行此行。

在中断模式下,你有多条可使用的命令,使用相应命令进行进一步的调试。


图 断点工具条(Breakpoint Toolbar)

3.1.1 逐过程(Step Over)

调试器执行到断点后,你可能需要一条一条的执行代码。 ”Step Over“[F10]命令用于一条一条的执行代码。这将执行当前高亮的行,然后暂停。如果在一条方法调用语句高亮时按F10,执行会停在调用语句的下一条语句上。Step Over会一次整个方法。
debug51
图: 逐过程(Step Over - F10)

3.1.2 逐语句(Step Into)

它与Step Over相似。唯一的不同是,如果当前高亮语句是方法调用,调试器会进入方法内部。快捷键是 ”F11“
debug52
图: 逐语句(Step Into - F11)

3.1.3 跳出(Step Out)

当你在一个方法内部调试时会用到它。如果你在当前方法内按 Shift - F11,调试器会完成此方法的执行,之后在调用此方法的语句的下一条语句处暂停。

3.1.4 继续(Continue)

它像是重新执行你的程序。它会继续程序的执行直到遇到下一个断点。快捷键是 ”F5“

3.1.5 设置下一语句(Set Next Statement)

这是一个非常有趣的特性。设置下一语句允许你在调试的时候 改变程序的执行路径。如果你的程序在某一行处暂停而且你想改变执行路径, 跳到指定行,在这一行上右击,在右击菜单中选择” 设置下一语句“。这样程序就会转到哪一行执行而不执行先前的代码。这在如下情况中非常有用:当你发现代码中某些行可能会导致程序的中断(break)而你不想让程序在那个时候中断。快捷键是 Ctrl + Shift + F10
debug3_small
图: 设置下一语句(Set Next Statement)

3.1.6 显示下一语句(Show Next Statement [Ctrl+*])

这一行用黄色箭头标记。这行是程序继续执行时下一条将执行的语句。

3.2 断点标签(Labeling in Break Point)

这是VS2010提供的新特征(feature)。用于更好的管理断点。它使得我们能够更好的分组和过滤断点。这像是对断点的归类。如果我们添加了与某一功能相关的不同类型的断点,我们可以根据需要使能(enable)、取消(disable)、过滤(filter)这些断点。例如,假设我们要调试一下代码块。
class Program
    {
        static void Main(string[] args)
        {
            string[] strNames = { "Name1", "Name2", "Name3", "Name4", "Name5", "Name6" };

            foreach (string name in strNames)
            {
                Console.WriteLine(name);   // BreakPoint
            }
            int temp = 4;
            for (int i = 1; i <= 10; i++)
            {
                if (i > 6)
                    temp = 5;
            }
        }

        public static void Method1()
        {
            Console.WriteLine("Break Point in Method1");   // BreakPoint
        }

        public static void Method2()
        {
            Console.WriteLine("Break Point in Method2");  // BreakPoint
            Console.WriteLine("Break Point in Method2");  // BreakPoint
        }

        public static void Method3()
        {
            Console.WriteLine("Break Point in Method3");  // Breakpoint
        }
    }
执行程序将停在第一个断点处。下图给出了断点列表。
debug11_small.png
图: 断点列表
上图中Labels列都为空。下面介绍如何给断点设置标签(label)以及如何使用标签。只需在特定代码行的断点符号上右击(①)或者在断点窗口中设置(②)即可对任何断点设置标签。
  • 15
    点赞
  • 96
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值