***************************************************

更多精彩,欢迎进入:http://shop115376623.taobao.com

***************************************************

许多Visual Studio下的程序员,甚至一些很有经验的开发人员,都不知道这些技巧。希望这篇文章能帮你掌握这些技巧。它们都很简单,却能帮你节约大量的时间。

一、跳到当前光标处(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)”这个调试功能。“跟踪点“是种特殊的断点,当它被命中时,它会触发一系列自定义操作。如果你想观察程序的行为,而又不想中断调试的时候,这个功能尤其有用。

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

以上程序中,我们使用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的“输出”窗口中看到如下结果。注意命中跟踪点时,宏会自动列出每个局部变量的名称和值:

VS2010断点设置技巧相关推荐

  1. Chrome 中的 JavaScript 断点设置和调试技巧

    你是怎么调试 JavaScript 程序的?最原始的方法是用 alert() 在页面上打印内容,稍微改进一点的方法是用 console.log() 在 JavaScript 控制台上输出内容.嗯~,用 ...

  2. VS2005调试器 1,断点设置有技巧(转载)

    VS2005调试器 1,断点设置有技巧: 1)设置条件断点,比如i==10,变量改变时断点: 2)如何让断点在指定的命中次数或者大于某个次数时触发呢?方法是设定几个断点的HitCount,右键单击断点 ...

  3. KEIL 断点调试技巧

    实际项目中断点调试起了很大作用,Keil的断点调试功能很强大,除了普通的设置断点运行到断点处,还有单步.跳转.除了这些常规的方法,对于一些疑难杂症,常规方法就有点杯水车薪了.下面我总结下我在工作中常用 ...

  4. IDEA断点调试技巧

    IDEA断点调试技巧 1 怎么开启断点调试 2 调试界面咋那么多按钮 2.1 返回断点位置 2.2 步过 2.3 步入 2.4 强制步入,步出 2.6 回退断点 2.7 断点跳到光标处 2.8 表达式 ...

  5. c语言程序调试断点,VC6断点调试技巧

    前言: 看到不少同学在学习过程中总会碰到各种与自己期望不符的结果而不知所措,如运行结果不对,程序运行崩溃.输出乱码等这种语法正确编译能通过而逻辑不正确的情况,发生这类问题大多都是因为我们无法掌控编译器 ...

  6. c语言 vc 单步调试方法,VC6断点调试技巧

    在第一篇中,我们为大家介绍了如何用VC6进行断点调试,可以实现程序的分步执行.今天我们将继续深入,进行更多断点调试的学习. 首先,写一个例子程序: #include int fun() { print ...

  7. Windows 2003 Server 设置技巧

    很多人可以用上的泄漏的版本,相对于工作站系统,服务器在由于做了更多的内核优化,所以在稳定性和安全性方面有很大的提高.但是,很多人并不是需要Server的全部功能的,而且Server系统关闭了某些工作站 ...

  8. 无盘服务器镜像包缓存设多少,【转】谈谈深度无盘缓存工具设置技巧

    提到无盘的缓存设置,我相信论坛上的网管朋友绝对不会陌生,毕竟我们每天在这里聊的人,基本上平常都做过无盘都差不多用过supercache,而我们平常提到的如何提高带机量这些相关话题,什么一台服务器带15 ...

  9. Fiddler抓包工具详解(四)(断点设置+弱网测试)

    这里写目录标题 断点设置 全局断点 局部断点 bpu命令 bpafter命令 篡改响应报文 弱网测试 开启网络限速 精确限速 断点设置 全局断点 特点:所有请求断点 设置方法一:Rules-Autom ...

最新文章

  1. 整数转罗马数字 python
  2. Tableau实战系列浏览 Tableau 环境(八) -tableau文件类型、语言和区域设置以及图标
  3. 大剑无锋之介绍几个常见的网络协议且位于哪一层?【面试推荐】
  4. Android的activity的生命周期
  5. php mysql读取数据_PHP MySQL 读取数据
  6. Vue — 第三天(计算属性和json-server)
  7. codeforces 486A-C语言解题报告
  8. 金山办公科创板过会 雷军有望迎来实控第三家上市公司
  9. django准备 —环境配置,及其虚拟环境安装、django安装、数据库安装、新建项目...
  10. 假期第7天……想和测试人聊聊这个问题
  11. 【Python实践-6】将不规范的英文名字,变为首字母大写,其他小写的规范名字...
  12. 好用靠谱的人事管理软件推荐?
  13. 简繁体计算机术语对照表
  14. 魔兽世界阿拉索人数最多服务器,魔兽世界8月国服人口普查 2019wow各服务器阵容比例汇总...
  15. 如何将excel中的多列数据进行转置
  16. Java Socket设置timeout几种常用方式总结
  17. 摘要认证 java_摘要认证及实现HTTP digest authentication
  18. 各种光流算法介绍和原理
  19. 关于快手小铃铛广告投放的方式
  20. Excel 中多行时快速生成自增长序号

热门文章

  1. js 实现用window.print()打印页面中的部分内容,局部打印
  2. h5页面点击事件ios没反应 移动端兼容性问题
  3. 通过取父级for循环的i来理解闭包,iife,匿名函数
  4. centos 6.5 安装 mongodb
  5. 人的幸福感取决于什么
  6. 可恶,谁占用了我的80端口?
  7. 愉快且卓有成效:培养你与人相处的能力
  8. FLEXAIR 界面展示。
  9. 别的AI还在打游戏,这个AI已经当上“超级马里奥”游戏策划了|GECCO最佳论文
  10. 《Adobe InDesign CS6中文版经典教程》—第1课1.5节修改文档的缩放比例