已阅读5页,还剩14页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
掌握VS2010调试 - 入门指南debuggingvisual studio 2010VS2010调试目录(?)-1. 导言2. 如何启动调试3. 断点Breakpoints1. 1 使用断点进行调试1. 11 逐过程Step Over2. 12 逐语句Step Into3. 13 跳出Step Out4. 14 继续Continue5. 15 设置下一语句Set Next Statement6. 16 显示下一语句Show Next Statement Ctrl2. 2 断点标签Labeling in Break Point3. 3 条件断点Conditional Breakpoint4. 4 导入导出断点Import Export Breakpoint5. 5 断点命中计数Breakpoint Hit Count6. 6 Breakpoint When Hit7. 7 断点筛选器Breakpoint Filter4. 数据便签Data Tip1. 1 Pin Inspect Value During Debugging2. 2 Drag-Drop Pin Data Tip3. 3 Adding Comments4. 4 Last Session Debugging Value5. 5 Import Export Data Tips6. 6 Change Value Using Data Tips7. 7 Clear Data Tips5. 监视窗口Watch Windows1. 1 局部变量Locals2. 2 自动窗口Autos3. 3 监视Watch1. 有4个可同时使用的监视窗口 图多个监视窗口2. 31 Creating Object ID4. 46. 即时窗口Immediate Window7. 调用堆栈Call Stack8. 调试多线程程序Debugging Multithreaded Program1. 1 Exploring Threads Window2. 2 Flag Just My Code3. 3 Break Point Filter - Multithread Debugging9. 调试并行程序Debugging Parallel Program1. 1 Parallel Task and Parallel Stacks10. Debugging with IntelliTrace1. 1 Overview2. 2 Mapping with IntelliTrace3. 3 Filter IntelliTrace Data11. 调试常用快捷键Useful Shortcut Keys For VS Debugging12. 深入学习Further Study13. 总结Summary1 导言在软件开发周期中,测试和修正缺陷(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调试。我发了另外两篇相关的帖子。如下: 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 - F10)3.1.2 逐语句(Step Into)它与Step Over相似。唯一的不同是,如果当前高亮语句是方法调用,调试器会进入方法内部。快捷键是”F11“。图: 逐语句(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。图: 设置下一语句(Set Next Statement)3.1.6 显示下一语句(Show Next Statement Ctrl+*)这一行用黄色箭头标记。这行是程序继续执行时下一条将执行的语句。3.2 断点标签(Labeling in Break Point)这是VS2010提供的新特征(feature)。用于更好的管理断点。它使得我们能够更好的分组和过滤断点。这像是对断点的归类。如果我们添加了与某一功能相关的不同类型的断点,我们可以根据需要使能(enable)、取消(disable)、过滤(filter)这些断点。例如,假设我们要调试一下代码块。csharpview plaincopy1. classProgram2. 3. staticvoidMain(stringargs)4. 5. stringstrNames=Name1,Name2,Name3,Name4,Name5,Name6;6. 7. foreach(stringnameinstrNames)8. 9. Console.WriteLine(name);/BreakPoint10. 11. inttemp=4;12. for(inti=1;i6)15. temp=5;16. 17. 18. 19. publicstaticvoidMethod1()20. 21. Console.WriteLine(BreakPointinMethod1);/BreakPoint22. 23. 24. publicstaticvoidMethod2()25. 26. Console.WriteLine(BreakPointinMethod2);/BreakPoint27. Console.WriteLine(BreakPointinMethod2);/BreakPoint28. 29. 30. publicstaticvoidMethod3()31. 32. Console.WriteLine(BreakPointinMethod3);/Breakpoint33. 34. 执行程序将停在第一个断点处。下图给出了断点列表。图: 断点列表上图中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)点击右键菜单中的”条件“后,会弹出下面的对话框设置断点的条件。图: 断点条件设置假设你要调试下面的代码块:csharpview plaincopy1. classProgram2. 3. staticvoidMain(stringargs)4. 5. stringstrNames=Name1,Name2,Name3,Name4,Name5,Name6;6. 7. foreach(stringnameinstrNames)8. 9. Console.WriteLine(name);/Breakpointishere10. 11. 12. 你在Console.WriteLine()语句处设置了断点。当执行程序时,每次for-each循环都会停住。如果你想让代码只在name=Name3时停住,该怎么办呢?非常简单,你只需使用条件name.Equals(Name3)。图: 设置断点条件查看断点符号。它应该看上去像是一个加(+)号在断点符号内部,这表示该断点是条件断点。图: 条件断点符号(Conditional Breakpoint Symbol)设置断点的条件之后,在调试程序,调试器只会在满足给定条件时才停住。图: 条件断点命中(Conditional Breakpoint hit)条件输入框的自动补全(intellisense):上面给出的断点条件非常简单,可以非常容易的写到条件文本框中。有时你可能需要定义很大很复杂的条件。不必担心,VS为条件文本输入框也提供了自动补全功能。因此,在条件框中输入就像是在编辑器中一样方便。如下图。图: 条件文本框的自动补全(intellisense in condition textbox)我几乎讲解了条件断点的所有内容。除了下面这点。在条件窗口中有两个选项:1. Is True2. Has Changed我们已经看到”Is True“选项的用途了。”Has Changed“用在当你想在某些值变为某些特定值的时候停住。3.4 导入/导出断点(Import / Export Breakpoint)3.5 断点命中计数(Breakpoint Hit Count)3.6 Breakpoint When Hit3.7 断点筛选器(Breakpoint Filter)你可以限制断点只对特定进程或线程有效。这在进行多线程程序的调试时非常有用。右击断点选”筛选器“即可打开筛选器窗口。图: 断点筛选器(Breakpoint Filter)在筛选规则中,你可以设置进程名,进程Id,机器名,线程ID等。我会在多线程调试小节中详述其用法。4 数据便签(Data Tip)数据便签是应用程序调试期间用于查看对象和变量的一种高级便签消息。当调试器执行到断点时,将鼠标移到对象或者变量上方时,你会看到它们的当前值。你甚至可以看到一些复杂对象(如dataset,datatable等等)的细节。数据便签左上角有一个“+”号用于展开它的子对象或者值。图: 调试时的数据便签(DataTips During Debugging)几个月前,我发过一篇关于VS 2010 DataTip Debugging Tips的文章。下面是一些在调试时有用的特性。4.1 Pin Inspect Value During Debugging4.2 Drag-Drop Pin Data Tip4.3 Adding Comments4.4 Last Session Debugging Value4.5 Import Export Data Tips4.6 Change Value Using Data Tips4.7 Clear Data Tips5 监视窗口(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 IDVisual Studio调试器提供另外一个强大的功能,支持我们为对象的任何一个特定实例创建一个对象ID(object ID)。这可以用于在任何时间监控任意对象,甚至是该对象位于范围(scope)之外。在监视窗口(watch window)右击特定对象变量,再单击“Make Object ID”即可创建Object ID。图: 创建Object ID在对特定对象变量创建Object ID之后,Visual Studio会给这个对象添加一个数码和“#”号,用来表示。图:添加Object ID后5.46 即时窗口(Immediate Window)即时窗口是开发人员常用的功能。它可以在不改变当前调试步骤的情况下修改变量值或者执行一些语句。我们可以通过菜单调试 窗口 即时(Debug Window Immediate Window)打开即时窗口。即时窗口支持一组命令,可在调试的任何时刻执行。它也支持Intellisense。在调试期间,我们可以在即时窗口中执行任何命令或者代码语句。图:基本即时窗口(Basic Immediate Window)这是对所有开发人员来说最为常用的特性,因此我就不一一介绍即时窗口的每一条命令了。7 调用堆栈(Call Stack)8 调试多线程程序(Debugging Multithreaded Program)8.1 Exploring Threads Window8.2 Flag Just My Code8.3 Break Point Filter - Multithread Debugging9 调试并行程序(Debugging Parallel Program)9.1 Parallel Task and Parallel Stacks10 Debugging with IntelliTrace10.1 Overview10.2 Mapping with IntelliTrace10.3 Filter IntelliTrace Data11 调试常用快捷键(Useful Shortcut Keys For VS Debugging)Shortcut KeysDescriptionsCtrl-Alt-V, ADisplays the Auto windowCtrl-Alt-BDisplays the Breakpoints dialogCtrl-Alt-CDisplays the Call StackCtrl-Shift-F9Clears all of the breakpoints in the projectCtrl-F9Enables or disables the breakpoint on the current line of codeCtrl-Alt-EDisplays the Exceptions dialogCtrl-Alt-IDisplays the Immediate windowCtrl-Alt-V, LDisplays the Locals windowCtrl-Alt-QDisplays the Quick Watch dialogCtrl-Shift-F5Terminates the current debugging session, rebuilds if necessary, and starts a new debugging session.Ctrl-F10Starts or resumes execution of your code and then halts execution when it reaches the selected statement.Ctrl-Shift-F10Sets the execution point to the line of code you chooseAlt-NUM *Highlights the next statementF5If not currently debugging, this runs the startup project or projects and attaches the debugger.Ctrl-F5Runs the code without invoking the debuggerF11Step IntoShift-F11Executes the remaining lines out from procedureF10Executes the next line of code but does not step into any function callsShift-F5Available in break and run modes, this terminates
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论