怎么把自己网站推广出去,手机网站开发session,优化网站seo公司,wordpress代码实现下载文件1 导言 在软件开发周期中#xff0c;测试和修正缺陷#xff08;defect#xff0c;defect与bug的区别#xff1a;Bug是缺陷的一种表现形式#xff0c;而一个缺陷是可以引起多种Bug的#xff09;的时间远多于写代码的时间。通常#xff0c;debug是指发现缺陷并改正的过程。… 1 导言 在软件开发周期中测试和修正缺陷defectdefect与bug的区别Bug是缺陷的一种表现形式而一个缺陷是可以引起多种Bug的的时间远多于写代码的时间。通常debug是指发现缺陷并改正的过程。修正缺陷紧随debug之后或者说二者是相关的。如果代码中存在缺陷我们首先要识别造成缺陷的根本原因root cause这个过程就称作调试debugging。找到根本原因后就可以修正缺陷。 那么如何调试代码呢Visual Studio提供了很多用于调试的工具。有时调试需要花费大量时间去识别root cause。VS提供了许多辅助调试的便捷的工具。调试器Debugger包含错误列表、添加断点、可视化的程序流程、控制执行流程、Data Tips、监视窗口watch windows、多线程调试、线程窗口、并行调试概览以及IntelliTrace调试概览。我希望本文能够对调试功能的使用者有所裨益。请注意本文使用VS2010。某些功能在旧版本中也是一致的但是VS2010新增了许多featuresLabeling 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调试。我发了另外两篇相关的帖子。如下 Debug Your ASP.NET Application that Hosted on IIS Remote IIS Debugging: Debug your ASP.NET Application which is hosted on Remote IIS Server 通常我们通过在可能存在问题代码处加断点来启动调试。因此我们从断点开始讲起。 3 断点Breakpoints
断点用于通知调试器何时何处暂停程序的执行。通过点击左边栏或者按F9键在当前行添加断点。在加断点之前你需要知道你的代码将会出现什么错误在什么地方停止执行。当调试器执行到断点处时你可以使用其他的调试工具核对代码何处出现错误。图 设置断点Set Breakpoint 3.1 使用断点进行调试
你已经在你想要暂停执行的地方设置了断点。现在按F5键启动调试当程序执行到断点处时自动暂停执行。此时你有多种方式来检查代码。命中断点hit the breakpoint后加断点的行变为黄色意指下一步将执行此行。在中断模式下你有多条可使用的命令使用相应命令进行进一步的调试。 图 断点工具条Breakpoint Toolbar
3.1.1 逐过程Step Over
调试器执行到断点后你可能需要一条一条的执行代码。”Step Over“[F10]命令用于一条一条的执行代码。这将执行当前高亮的行然后暂停。如果在一条方法调用语句高亮时按F10执行会停在调用语句的下一条语句上。Step Over会一次整个方法。图 逐过程Step Over - F103.1.2 逐语句Step Into
它与Step Over相似。唯一的不同是如果当前高亮语句是方法调用调试器会进入方法内部。快捷键是”F11“。图 逐语句Step Into - F113.1.3 跳出Step Out
当你在一个方法内部调试时会用到它。如果你在当前方法内按Shift - F11调试器会完成此方法的执行之后在调用此方法的语句的下一条语句处暂停。3.1.4 继续Continue
它像是重新执行你的程序。它会继续程序的执行直到遇到下一个断点。快捷键是”F5“。3.1.5 设置下一语句Set Next Statement
这是一个非常有趣的特性。设置下一语句允许你在调试的时候改变程序的执行路径。如果你的程序在某一行处暂停而且你想改变执行路径跳到指定行在这一行上右击在右击菜单中选择”设置下一语句“。这样程序就会转到哪一行执行而不执行先前的代码。这在如下情况中非常有用当你发现代码中某些行可能会导致程序的中断break而你不想让程序在那个时候中断。快捷键是Ctrl Shift F10。图 设置下一语句Set Next Statement3.1.6 显示下一语句Show Next Statement [Ctrl*]
这一行用黄色箭头标记。这行是程序继续执行时下一条将执行的语句。3.2 断点标签Labeling in Break Point
这是VS2010提供的新特征feature。用于更好的管理断点。它使得我们能够更好的分组和过滤断点。这像是对断点的归类。如果我们添加了与某一功能相关的不同类型的断点我们可以根据需要使能enable、取消disable、过滤filter这些断点。例如假设我们要调试一下代码块。[csharp] view plain copy 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 } } 执行程序将停在第一个断点处。下图给出了断点列表。图 断点列表上图中Labels列都为空。下面介绍如何给断点设置标签label以及如何使用标签。只需在特定代码行的断点符号上右击①或者在断点窗口中设置②即可对任何断点设置标签。图 设置断点标签Setting Breakpoint Label右击断点点击编辑标签Edit Labels即可对任意断点添加标签。对于示例代码我为所有断点的标签起了易于理解的名字。图 添加断点标签Adding Breakpoint Label这些标签如何辅助我们调试呢现在所有断点都是使能的enabled。如果你不想调试method2一般情况下你必须去对应的方法中一个一个的取消断点但这里你可以通过标签名过滤或者搜索它们然后选中它们以方便的取消它们。图 使用标签过滤断点Filter Breakpoint Using Labels断点标签到此介绍完毕。我举的例子非常简单但是断点标签在你调试大量代码多个工程等情况下非常有用。3.3 条件断点Conditional Breakpoint
假设你在多次迭代循环处理数据而你只想调试其中某几次迭代。这意味着你想根据某些特定条件暂停你的程序。Visual Studio断点允许你设置条件断点。当且仅当条件满足时调试器才会停住。首先你需要在你想暂停执行处设置断点。然后右击红色的断点图标。右键菜单中点击”条件“。图 设置断点条件Set Breakpoint Condition点击右键菜单中的”条件“后会弹出下面的对话框设置断点的条件。图 断点条件设置假设你要调试下面的代码块[csharp] view plain copy class Program { static void Main(string[] args) { string [] strNames { Name1,Name2, Name3, Name4, Name5, Name6}; foreach(string name in strNames) { Console.WriteLine(name); // Breakpoint is here } } } 你在Console.WriteLine()语句处设置了断点。当执行程序时每次for-each循环都会停住。如果你想让代码只在nameName3时停住该怎么办呢非常简单你只需使用条件name.Equals(Name3)。 图 设置断点条件查看断点符号。它应该看上去像是一个加号在断点符号内部这表示该断点是条件断点。图 条件断点符号Conditional Breakpoint Symbol设置断点的条件之后在调试程序调试器只会在满足给定条件时才停住。图 条件断点命中Conditional Breakpoint hit条件输入框的自动补全intellisense上面给出的断点条件非常简单可以非常容易的写到条件文本框中。有时你可能需要定义很大很复杂的条件。不必担心VS为条件文本输入框也提供了自动补全功能。因此在条件框中输入就像是在编辑器中一样方便。如下图。图 条件文本框的自动补全intellisense in condition textbox我几乎讲解了条件断点的所有内容。除了下面这点。在条件窗口中有两个选项Is TrueHas Changed 我们已经看到”Is True“选项的用途了。”Has Changed“用在当你想在某些值变为某些特定值的时候停住。 3.4 导入/导出断点Import / Export Breakpoint 3.5 断点命中计数Breakpoint Hit Count 3.6 Breakpoint When Hit 3.7 断点筛选器Breakpoint Filter
你可以限制断点只对特定进程或线程有效。这在进行多线程程序的调试时非常有用。右击断点选”筛选器“即可打开筛选器窗口。图 断点筛选器Breakpoint Filter在筛选规则中你可以设置进程名进程Id机器名线程ID等。我会在多线程调试小节中详述其用法。4 数据便签Data Tip
数据便签是应用程序调试期间用于查看对象和变量的一种高级便签消息。当调试器执行到断点时将鼠标移到对象或者变量上方时你会看到它们的当前值。你甚至可以看到一些复杂对象如datasetdatatable等等的细节。数据便签左上角有一个“”号用于展开它的子对象或者值。图 调试时的数据便签DataTips During Debugging几个月前我发过一篇关于VS 2010 DataTip Debugging Tips的文章。下面是一些在调试时有用的特性。4.1 Pin Inspect Value During Debugging 4.2 Drag-Drop Pin Data Tip 4.3 Adding Comments 4.4 Last Session Debugging Value 4.5 Import Export Data Tips 4.6 Change Value Using Data Tips 4.7 Clear Data Tips 5 监视窗口Watch Windows 5.1 局部变量Locals
列出当前方法中的所有变量。当调试器停在某特定断点并打开Autos窗口时将展示当前范围中与此值相关的变量。图Local Variables5.2 自动窗口Autos
这些变量由VS调试器在调试的时候自动检测。VS检测与当前语句相关的对象或变量基于此列出Autos变量。Autos Variable的快捷键是Ctrl D A。图Autos - Ctrl D, A5.3 监视Watch
Watch窗口用于添加变量。你可以添加任意多个变量。添加方法是右击变量并选择“Add to Watch”。图Watch - Ctrl D, W也可以使用拖放Drag and Drop将变量添加到监视窗口中。从监视窗口中删除变量的方法是右击变量并选择“Delete Watch”。通过调试窗口也可以在运行时编辑这些变量值。有4个可同时使用的监视窗口。 图多个监视窗口 若果变量中含有对象实例左边会有一个“”号用于查看对象的属性和成员。图展开监视变量5.3.1 Creating Object ID
Visual Studio调试器提供另外一个强大的功能支持我们为对象的任何一个特定实例创建一个对象IDobject ID。这可以用于在任何时间监控任意对象甚至是该对象位于范围scope之外。在监视窗口watch window右击特定对象变量再单击“Make Object ID”即可创建Object ID。图 创建Object ID在对特定对象变量创建Object ID之后Visual Studio会给这个对象添加一个数码和“#”号用来表示。图添加Object ID后5.4 6 即时窗口Immediate Window
即时窗口是开发人员常用的功能。它可以在不改变当前调试步骤的情况下修改变量值或者执行一些语句。我们可以通过菜单调试 窗口 即时Debug Window Immediate Window打开即时窗口。即时窗口支持一组命令可在调试的任何时刻执行。它也支持Intellisense。在调试期间我们可以在即时窗口中执行任何命令或者代码语句。图基本即时窗口Basic Immediate Window这是对所有开发人员来说最为常用的特性因此我就不一一介绍即时窗口的每一条命令了。7 调用堆栈Call Stack
8 调试多线程程序Debugging Multithreaded Program 8.1 Exploring Threads Window 8.2 Flag Just My Code 8.3 Break Point Filter - Multithread Debugging 9 调试并行程序Debugging Parallel Program 9.1 Parallel Task and Parallel Stacks 10 Debugging with IntelliTrace 10.1 Overview 10.2 Mapping with IntelliTrace 10.3 Filter IntelliTrace Data 11 调试常用快捷键Useful Shortcut Keys For VS Debugging Shortcut Keys Descriptions Ctrl-Alt-V, A Displays the Auto window Ctrl-Alt-B Displays the Breakpoints dialog Ctrl-Alt-C Displays the Call Stack Ctrl-Shift-F9 Clears all of the breakpoints in the project Ctrl-F9 Enables or disables the breakpoint on the current line of code Ctrl-Alt-E Displays the Exceptions dialog Ctrl-Alt-I Displays the Immediate window Ctrl-Alt-V, L Displays the Locals window Ctrl-Alt-Q Displays the Quick Watch dialog Ctrl-Shift-F5 Terminates the current debugging session, rebuilds if necessary, and starts a new debugging session. Ctrl-F10 Starts or resumes execution of your code and then halts execution when it reaches the selected statement. Ctrl-Shift-F10 Sets the execution point to the line of code you choose Alt-NUM * Highlights the next statement F5 If not currently debugging, this runs the startup project or projects and attaches the debugger. Ctrl-F5 Runs the code without invoking the debugger F11 Step Into Shift-F11 Executes the remaining lines out from procedure F10 Executes the next line of code but does not step into any function calls Shift-F5 Available in break and run modes, this terminates the debugging session Ctrl-Alt-H Displays the Threads window to view all of the threads for the current process F9 Sets or removes a breakpoint at the current line Ctrl-Alt-W, 1 Displays the Watch 1 window to view the values of variables or watch expressions Ctrl-Alt-P Displays the Processes dialog, which allows you to attach or detach the debugger to one or more running processes Ctrl-D,V IntelliTrace Event 到此本文结束。希望你喜欢本文。请分享你的反馈和建议。12 深入学习Further Study Debugging Task-Based Parallel Applications in Visual Studio 2010 By Daniel Moth and Stephen ToubDebugging With IntelliTrace 13 总结Summary
本文介绍了调试过程的基本内容。介绍了如何使用VS调试一个应用程序。我解释了几乎所有重要的工具以及它们的使用方法。对于并行程序调试我只讲了基础部分。在深入学习小节中深入讲解了并行调试过程。如果你感兴趣请阅读。我的主要目的是涵盖Visual Studio中提供的几乎所有调试工具。希望你从本文中学到了一些新知识。“自动窗口”Autos当前使用的变量 “局部窗口”Locals在范围内的所有变量 “监视N”Watch可定制N从1到4 Step Into逐语句执行并移动到下一条语句实际上跳入上一条语句的代码块此代码块的第一条 Step Over逐过程执行并跳到下一条语句但不进入上一条语句的代码块 Step Out跳出执行到代码块结尾 命令窗口Command 即时窗口Immediate主要用于计算表达式 参考资料 [1] Mastering Debugging in Visual Studio 2010 - A Beginners Guide [2] bug和缺陷的区别