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

 跳到当前光标处(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

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

举一个DataTable的DebuggerVisualizers的例子:

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

转载于:https://www.cnblogs.com/gc2013/p/4095439.html

VS2010调试技巧相关推荐

  1. 使用VS2010调试技巧让C指针无处遁形

    Linux 下调试远没有windows下的VS方便,不管是VC++6还是VS2003,2005,2008,2010,2012. VS2012自动格式化代码 Ctrl+K+D VS下调试一定要注意尽量不 ...

  2. VS2010中的调试技巧

    跳到当前光标处(Ctrl+F10) 我经常看到人们为了到达目标代码位置,而在程序中早早设定了断点,然后反复地按F10/F11,一步步走到目标代码处.当程序员的确需要仔细观察每一步的状态变化时, F10 ...

  3. VS2010“.NET研究”中的调试技巧

    这是我的博客中关于VS 2010和.NET 4发布系列的第二十六篇文章. 今天的博文将介绍Visual Studio中的一些实用调上海徐汇企业网站制作试技巧.这是受我朋友Scott Cate (他发表 ...

  4. [原译]11个高效的VS调试技巧

    介绍 调试是软件开发周期中的一个很重要的部分,有时很有挑战性,有时候则让程序员迷惑,有时候让程序员发疯,但是.可以肯定的是,对于任何不是太那个微不足道的程序来说,调试是不可避免的.近年来,调试工具的发 ...

  5. Visual Studio的调试技巧

    Visual Studio的调试技巧 [原文地址] Debugging Tips with Visual Studio 2010 [原文发表日期] 2010/8/19 10:48 AM 这是我写的关于 ...

  6. 11个高效的VS调试技巧

    介绍 调试是软件开发周期中的一个很重要的部分,有时很有挑战性,有时候则让程序员迷惑,有时候让程序员发疯,但是.可以肯定的是,对于任何不是太那个微不足道的程序来说,调试是不可避免的.近年来,调试工具的发 ...

  7. 【厚积薄发系列】C++项目总结21—VS远程调试技巧分享

    背景: 在实际项目中有时候会遇到一些bug,测试环境或者线上环境(后面简称测试环境)能稳定复现,而自己的开发环境死活复现不了.面对这样的问题.秉持严谨的态度,学会远程调试技巧尤为重要. 步骤: 1.找 ...

  8. 转:Python 代码调试技巧

    Python 代码调试技巧 转载于:https://www.cnblogs.com/kira2will/p/4254754.html

  9. 你可能不知道的 IDEA 高级调试技巧

    作者:十光年 www.cnblogs.com/jun1019/p/9741224.html 一.条件断点 循环中经常用到这个技巧,比如:遍历1个大List的过程中,想让断点停在某个特定值. 参考上图, ...

  10. Javascript调试技巧整理

    整理一下网上看到的实用调试技巧! 1. 不要使用alert 首先,alert只能打印出字符串,如果打印的对象不是String,则会调用toString()方法将该对象转成字符串(比如转成[object ...

最新文章

  1. PatchmatchNet:一种高效multi-view stereo框架 (CVPR2021 Oral)
  2. 前端如何获取联通积分_怎么利用定制的小程序来获取流量
  3. python顺时针打印矩阵_python实现顺时针打印矩阵
  4. delphi 串口通信发送_STM32第五章串口通讯详解
  5. 修改MS SQL2000数据库的所有者,很实用
  6. android gallery自动播放,可循环显示图像的Android Gallery组件
  7. python需要掌握的词汇量_北大保安英语词汇量1.5万,会用Python编程,孟母三迁真有道理...
  8. ssm项目直接加html文件,如何把ssm项目和vue项目部署在云服务器(上)
  9. *第十六周*数据结构实践项目二【大数据集上排序算法性能的体验】
  10. 130.C++经典面试题 52-100
  11. HarmonyOS开源第三方组件 —— B站开源弹幕库引擎的使用
  12. C#开发组态软件心路历程
  13. 小爱音箱mini系统故障怎么办_小编处理win7系统连接小爱音箱mini的解决教程
  14. 君正Ingenic X1000E_halley2 更改Logo
  15. 彻底关闭Adobe Flash Player的弹窗广告(不影响Flash正常使用)
  16. Codeforces-1682 C: LIS or Reverse LIS? 【构造】
  17. Mybatis| Bug合集
  18. NDN全栈: 一、命名数据网络(Named Data Networking)背景介绍
  19. C#的OpenFileDialog和SaveFileDialog的常见用法
  20. 【Pytorch】常见的人脸身份识别损失函数

热门文章

  1. mysql的四大线程_阿里一面就凉了:MySQL+多线程+Redis+算法+网络一个都没说明白...
  2. java string转number_DataBinding的简单使用(java/kotlin)
  3. module.exports 和 exports 的区别
  4. 原生JS大揭秘—原型链
  5. android 6.0权限机制的简单封装(支持批量申请权限)
  6. ASP.NET 性能监控工具和优化技巧
  7. Linq 支持动态字查询集合, 也就是说根据传入的值进行查询。
  8. 利用jsoup进行模拟登录
  9. Expression Blend学习5控件-TextButton
  10. 记录MySql错误消息