`
yangzhiyong77
  • 浏览: 965946 次
文章分类
社区版块
存档分类
最新评论

VS2010 调试技巧

 
阅读更多

最近合作开发,代码已经完成了,但是一调试,错误一大堆,由于是合作开发,不确定是哪层的错误,得一步步得走,很是费时费力,平时调试的技巧用的不多,现在集中调试,结果有些手忙脚乱,效率也很低,所以在网上找了一些技巧,整理了一下,分享给大家。它们都很简单,却能帮我们节约大量的时间,希望对大家有帮助。

 跳到当前光标处(Ctrl+F10)

  我经常看到人们为了到达目标代码位置,而在程序中早早设定了断点,然后反复地按F10/F11,一步步走到目标代码处。当程序员的确需要仔细观察每一步的状态变化时, F10/F11是合理的选择。然而多数情况下,人们只想快速到达他们真正关心的代码处,这时候F10/F11就不是最佳选择了。

  这时,你应该利用“跳到当前光标处”这个功能。先把光标定位在要测的目标代码行上,再同时按Ctrl和F10,被测程序将直接跳到该行停下。你再也不用按许多次F10/F11了。即使目标代码位于独立的类或方法中,你仍然可以从当前正在检查的地方跳过去。

  条件中断

  另一种常见的情况是:开发人员设置断点,运行程序,利用不同的输入触发断点,然后在断点处手工检查是否满足某些特定的条件,从而决定是否继续调查。如果当前场景不是他们想要的,按F5继续运行程序,尝试别的输入,手动重复刚才的过程。

  针对上述情况,Visual Studio提供了一个方便得多的功能——“条件中断”。只有当程序满足了开发人员预设的条件后,条件断点才会被触发,调试器中断。这将避免频繁地手工检查/恢复程序运行,大量减少调试过程中的手工和烦琐工作。

  如何设置条件断点

  设置条件断点非常容易。在特定的行上,按F9设置断点。

  然后右击断点–编辑窗口左侧的红点,在上下文菜单上选择“Condition…”。

  这时弹出一个对话框供你设置激活该断点所需的条件。比如:我们希望只有当局部变量paginatedDinners的尺寸小于10时,调试才中断。我们可以写出如下的表达式:

  现在我再运行这个程序,实现搜索,只有返回值小于10时,程序运行才会被中断。对于大于10的值,该断点将被跳过。

  记录到达断点次数

  有时你希望,只有当第N次满足条件的运行到达断点时,才中断程序运行。例如:当第五次返回少于10份晚餐的查询结果时,中断程序运行。
  可以通过右击断点,然后在弹出菜单上选择“Hit count…”菜单命令实现。

  这时系统弹出一个对话框,它允许你指定:(1)当满足条件,而且进入断点的累计次数等于N时,断点命中一次。(2)当满足条件,而且进入断点的累计次数是N的倍数时,断点命中一次。(3)当满足条件,而且进入断点的累计次数大于N时,每次命中断点。

  机器/线程/进程过滤

  设置如下:右击断点;在弹出菜单上选择“Filter…”菜单命令;然后指定命中断点的特定条件:在指定的机器上、或指定的进程中、或指定的线程中。

  跟踪点—进入断点时的自定义操作

  许多人不知道“跟踪点(TrackPoints)”这个调试功能。“跟踪点“是种特殊的断点,当它被命中时,它会触发一系列自定义操作。如果你想观察程序的行为,而又不想中断调试的时候,这个功能尤其有用。

  我将用一个简单的控制台程序来演示如何使用“跟踪点”。如下是斐波那契数列的一个递归实现:

  以上程序中,我们使用Console.WriteLine() 输出针对特定输入值生成的最终斐波那契数列。如果希望在调试器里观察操作中每一次递归运算后的数列而又不实际中断程序运行,该怎么办呢?“跟踪点”可以轻松实现。

  设置跟踪点

  你可以在特定的行上,按F9加跟踪点。然后
  右击断点,在上下文菜单中选择“When Hit…”:

  在弹出对话框上,你可以设置命中该断点时,所触发的事件。

  在上面例子中,我们设定一旦命中断点时就打印追踪信息。注意,我们已经把局部变量“x”的值,作为追踪信息的一部分输出。局部变量可以通过{变量名}语法输出。你还可以利用系统内置的命令($CALLER, $CALLSTACK, $FUNCTION等等),在追踪信息中输出常用的调试值。

  在上例中,我们同时选中了底端的“continue execution“选项,这说明我们不希望程序中断调试状态,而是继续运行。唯一的不同是:每次断点条件满足时,我们的自定义追踪信息都将被输出。

  现在当我们运行程序时,会发现自定义追踪信息自动显示在Visual Studio的“输出“窗口里。这让我们很容易看到程序的递归调用过程:

  你也可以选择往应用程序中添加一个自定义追踪信息的监听器。这时追踪点的输出信息将通过它输出,而不是Visual Studio的“输出“窗口。

  跟踪点—运行自定义的宏

  上周,我在伦敦演讲时,有听众问道:当命中跟踪点时,能否自动输出所有的局部变量?

  Visual Studio中并没有这样的内置功能,但我们可以写一个自定义宏来实现,然后在命中跟踪点时调用该宏。这个的实现需要先打开Visual Studio的宏编辑器(工具->宏->宏IDE菜单命令),然后在项目资源管理器的MyMacros节点下选择一个模块或创建新模块(如:加个名为“UsefulThings”的模块),再把下面的VB宏代码贴到模块中并保存。

Sub DumpLocals() Dim outputWindow As EnvDTE.OutputWindow outputWindow = DTE.Windows.Item(EnvDTE.Constants.vsWindowKindOutput).Object Dim currentStackFrame As EnvDTE.StackFrame currentStackFrame = DTE.Debugger.CurrentStackFrame outputWindow.ActivePane.OutputString(“*Dumping Local Variables*+ vbCrLf) For Each exp As EnvDTE.Expression In currentStackFrame.Locals outputWindow.ActivePane.OutputString(exp.Name +=+ exp.Value.ToString() + vbCrLf) Next End Sub

  上述宏代码将循环当前的堆栈,把所有的局部变量输出到“输出”窗口。

  使用自定义的“DumpLocals”宏

  然后,我们可以在如下的一个简单程序中使用刚定制的“DumpLocals”宏了:

  上述代码中,我们用F9在“Add”方法的返回值处加了个断点,然后右击断点,在弹出菜单上选择“When hit”。

  将显示如下对话框。和之前不一样, 我们不选“Print a message”选项,也不手工设定需要输出的变量;而是选择“Run a marco”复选框,并指定到我们上面创建的UsefulThings.DumpLocals宏上:

  为了使程序能在命中跟踪点后仍继续运行,我们将继续选中“continue execution”复选框。

  运行程序

  现在按F5运行程序,当“Add”方法被调用时,我们会在Visual Studio的“输出”窗口中看到如下结果。注意命中跟踪点时,宏会自动列出每个局部变量的名称和值:

或者在代码中写有Debug.Print() 语句来输出想查看的数据,在vs调试状态下我们可以再vs的OutPut窗口看见,同上图。

  利用数据提示功能(DataTips)

当程序执行到某一个位置,把鼠标放到变量上,会自动显示值。

  利用可视化调试窗体(DebuggerVisualizers)

举一个DataTable的DebuggerVisualizers的例子:

直接点击放大镜的图标,或者下拉列表中选择DataTable Visualizer,即可打开可视化的界面:如下图

当然如果是DateSet,可视化工具窗口的表可以选择DataSet所包含的所有表的信息。

转载的朋友请标明出处:http://blog.csdn.net/xiaoxian8023/article/details/7217549

分享到:
评论

相关推荐

    vs2010调试技巧

    vs2010调试技巧

    VS2010调试技巧

    VS2010调试技巧,很有用的调试技巧。

    VS2010中的调试技巧

    vs2010,VS2010中的调试技巧,

    VC++ 实战调试技巧

    调试技巧的重要性与课程安排 全实战性质的讲解,只涉及对我们最为关键的调试技巧 覆盖到我们日常使用中不常用但非常有用的技巧 针对实际我们实际不同...注:使用vs2010进行代码讲解,适用于vs2003~2008,vc6稍有区别

    VS2010中的调试技巧.doc

    VS2010中的调试技巧.doc

    Microsoft vc++调试入门

    Microsoft vc++调试入门——关于Microsoft vc++的调试技巧,很好用的!

    Windows程序调试.docx

    《Windows程序调试》文字版,word2010格式。 如果无法打开,可到... 特别整理,方便自己和广大同胞添加阅读批注和摘抄引用。 如喜欢本书,请购买正版。 此书是讲解了Windows下的调试技巧,玩VC者必看,强烈推荐。

    Matlab 2010基础入门视频教程第12章 程序调试和编程技巧.wmv

    视频教程

    《VC++ 2010入门经典》英文原版(附完整随书源码)

     分享c++程序的错误查找技术,并介绍通用的调试原则讨论每一个windows应用程序的结构和基本元素  举例说明如何使用mfc开发本地windows应用程序  指导读者用c++和c++/cli设计和创建大量的windows应用程序  为...

    Vs2008快捷键和技巧文本

    VS2005下,当你在调试代码的时候,有时候提示信息会遮挡代码,这个时候你按CTRL可以将提示透明。VS2008这个透明效果,在更多的地方可见了,你不妨自己亲自动手看看。 18、F12、Ctrl+减号、CTRL + SHIFT + 减号 这...

    MFC调用WIN32控制台程序调用printf功能

    简介:这是VC2010 MFC(vs2005、VC6.0也可以)中实现printf调试功能,即MFC程序利用控制台输出调试信息的详细页面,介绍了和服务器,有关的知识、技巧、经验,和一些服务器源码等。

    Visual C++2010入门经典(第5版) ivor horton

    分享c++程序的错误查找技术,介绍程序调试的通用准则 讨论每一个windows应用程序的结构和基本元素 举例说明如何用mfc开发本地windows应用程序 指导读者用c++和c++/cli设计和创建具体的windows应用程序 提供了大量...

    Visual Basic 2008/2010 高级编程(第5版)(高清PDF 330MB) 1/6

    本书通过大量示例详细阐述了Visual Basic 2008的各种新特性、编程知识和开发技巧,适合希望迁移到Visual Basic 2008编程的高级程序员。  该书与《Visual Basic 2008入门经典(第5版)》以及它们的早期版本一直是...

    Visual Basic 2008/2010 高级编程(第5版)(高清PDF 330MB) 4/6

    本书通过大量示例详细阐述了Visual Basic 2008的各种新特性、编程知识和开发技巧,适合希望迁移到Visual Basic 2008编程的高级程序员。  该书与《Visual Basic 2008入门经典(第5版)》以及它们的早期版本一直是...

    Visual.Basic.2010.&.NET4.高级编程(第6版)-文字版.pdf

    1.3 provb_vs2010项目 27 1.3.1 在代码中设置窗体属性 29 1.3.2 visual studio的其他组件 37 1.4 增强示例应用程序的功能 37 1.4.1 定制代码 39 1.4.2 构建应用程序 43 1.4.3 重用第一个windows窗体 50 ...

    Visual Basic 2008/2010 高级编程(第5版)(高清PDF 330MB) 3/6

    本书通过大量示例详细阐述了Visual Basic 2008的各种新特性、编程知识和开发技巧,适合希望迁移到Visual Basic 2008编程的高级程序员。  该书与《Visual Basic 2008入门经典(第5版)》以及它们的早期版本一直是...

    C#技巧集,C#葵花宝典,电子书库

    来自多本资料和本人实现,比本人BLOG多多也是首次公开,内容覆盖面广,每个技巧都通过本人亲自调试,有完整源代码,和测试方法,用了一个星期专门整理为CHM格式。最近有更新2010.3.20 需要者,发email:landgis@126.com,...

    Visual C++ 2010入门经典(第5版)--源代码及课后练习答案

     ·分享c++程序的错误查找技术,并介绍通用的调试原则讨论每一个windows应用程序的结构和基本元素  ·举例说明如何使用mfc开发本地windows应用程序  ·指导读者用c++和c++/cli设计和创建大量的windows应用程序 ...

Global site tag (gtag.js) - Google Analytics