今天尽是干货。我们来讨论如何为中断设置条件吧。

就像习大大讲的精确扶贫一样,如果我们能很精确地,仅在需要的时候把断点命中,以查看这个时候的程序数据,我们就能显著地提高 Debug 的效率。为断点设置条件能帮助我们更准确快速地发现程序的痛点。
基础方法与步骤:
  1. 移动光标进入要设断点的代码行
  2. 点击F9以设置断点
  3. 右键点击那个熟悉的红圈圈,然后击中菜单 Conditions...
  4. 在弹出的窗口中,我们在第一个下拉框中选择中选择不同的项可以为这个断点设置不同的中断条件
  • 条件表达式:访问上下文中的变量,可以设置命中的条件表达式。仅当表达式满足或者不满足的时候断点才真正生效。如下图中的例子,如果不设置条件,断点将会命中三次。设置了 keyValuePair.Key == "2" 之后,只会命中一次, 在 Key 为 “2” 的时候。
  • 击中次数:如果一行代码会被执行10次,而我们仅仅对最后两次感兴趣,我们可以设置 Hit Count > 8.
  • 过滤条件:我们可以通过机器,线程或者进程的一些属性来过滤断点。
今天尽是干货。我们来讨论如何为中断设置条件吧。

就像习大大讲的精确扶贫一样,如果我们能很精确地,仅在需要的时候把断点命中,以查看这个时候的程序数据,我们就能显著地提高 Debug 的效率。为断点设置条件能帮助我们更准确快速地发现程序的痛点。
基础方法与步骤:
  1. 移动光标进入要设断点的代码行
  2. 点击F9以设置断点
  3. 右键点击那个熟悉的红圈圈,然后击中菜单 Conditions...
  4. 在弹出的窗口中,我们在第一个下拉框中选择中选择不同的项可以为这个断点设置不同的中断条件
  • 条件表达式:访问上下文中的变量,可以设置命中的条件表达式。仅当表达式满足或者不满足的时候断点才真正生效。如下图中的例子,如果不设置条件,断点将会命中三次。设置了 keyValuePair.Key == "2" 之后,只会命中一次, 在 Key 为 “2” 的时候。
  • 击中次数:如果一行代码会被执行10次,而我们仅仅对最后两次感兴趣,我们可以设置 Hit Count > 8.
  • 过滤条件:我们可以通过机器,线程或者进程的一些属性来过滤断点。
迈进一小步:
如果一个方法会被很多地方调用,有些调用者还是别人的代码(我们没有调试符号)。我们能不能根据调用者(caller)的名字来过滤呢?比方说我们有如下一个方法:
当然,回答是肯定的。我们需要把这个方法做一点小小的修改, 添加一个带 CallerMemberName 特性并拥有默认值的参数 caller。之后,我们就可以根据 caller 来设置条件了。如下图所示,我们只有在调用者为 Calculator 的时候断点才会命中。
 
 
没有调试代码,也没有调试符号也可以调试吗?是的!不过,这是下次我们讨论的话题。
迈进一小步:
如果一个方法会被很多地方调用,有些调用者还是别人的代码(我们没有调试符号)。我们能不能根据调用者(caller)的名字来过滤呢?比方说我们有如下一个方法:
当然,回答是肯定的。我们需要把这个方法做一点小小的修改, 添加一个带 CallerMemberName 特性并拥有默认值的参数 caller。之后,我们就可以根据 caller 来设置条件了。如下图所示,我们只有在调用者为 Calculator 的时候断点才会命中。
 
 
没有调试代码,也没有调试符号也可以调试吗?是的!不过,这是下次我们讨论的话题。

Visual Studio 调试技巧 (二)-- 为中断设置条件的更多相关文章

  1. Visual Studio 调试技巧 -- 为 Lambda 表达式设置中断

    如果我说 .NET 世界上最厉害的开发平台(语言),资深的同仁肯定不会往下看了,因为这将是一个无休止的争论,到头来搞不好还是人身攻击.然而,如果我说 Visual Studio 是世界上最友好最强大的 ...

  2. Visual Studio 调试技巧[Command Window & Immediate Window ](Tips)

    Visual Studio 调试技巧[Command Window & Immediate Window ](Tips) 1. immediate window 定义的一些 alias (// ...

  3. 新手必备!11个强大的 Visual Studio 调试技巧

    简介 调试是软件开发周期中很重要的一部分.它具有挑战性,同时也很让人疑惑和烦恼.总的来说,对于稍大一点的程序,调试是不可避免的.最近几年,调试工具的发展让很多调试任务变的越来越简单和省时. 这篇文章总 ...

  4. Visual Studio 调试技巧

    .net程序开发工具我都用vs(visual studio),开发过程中的跟踪调试最常用的就是断点跟踪调试了,但是现在才发现,用了这么多年vs断点跟踪调试是白用了啊.它居然还可以有这么多用法. 设置断 ...

  5. Visual Studio调试技巧 -- Attach to Process

    本文系作者原创,但可随意转载.另:图中使用的IDE为Visual Studio 2013 RC 英文版. 一般写完代码时,我们通常会启动调试运行一下看看是否正确,启动运行的方式无非是F5-- Star ...

  6. Visual Studio 调试技巧之即时窗口的妙用

    在 Visual Studio 中有一个窗口叫 Immediate 窗口,中文版本应该叫即时窗口.默认会在你启动调试时在 VS 编辑器中弹出来.你也可以通过 Debug | Windows | Imm ...

  7. BI之SSIS入门最新版Visual Studio调试技巧

    简介 最近公司业务需要用到BI SSIS,SSIS是什么?"SSIS是Microsoft SQL Server Integration Services的简称,是生成高性能数据集成解决方案( ...

  8. Visual Studio 调试技巧:10 篇热文汇总

    本文精选了 DotNet  2017年11月份的10篇热门文章.其中有技术分享.技术资源. 注:以下文章,点击标题即可阅读 <Visual Studio的调试技巧 > 调试技巧是衡量程序员 ...

  9. Visual Studio 调试技巧---指针,元素个数

    刚才,我在Visual Studio 中发现了一个以更好的方式调试指针的技巧.您可以在监视窗口中选择“n”,其中“n”是要显示的元素数.我认为下图是不言而喻的.

随机推荐

  1. css 多出一行或多行后显示...的方法

    一行超出显示... .mui-ellipsis { overflow: hidden; white-space: nowrap; text-overflow: ellipsis; } 两行超出的显示. ...

  2. java 正则操作之获取

    // 正则操作 获取import java.util.regex.*;class Demo{ public static void main(String[] args){  String str=& ...

  3. Abstract Factory

    工厂模式比较好理解,其实就是通过访问工厂返回单一的对象/多个对象.那么抽象工厂就是返回多个抽象对象.这意味工厂返回对象纵向的一个扩展.但是很多时候,抽象工厂是两个维度的扩展,比方说在数据库类型和表对象 ...

  4. ZOOKEEPER在CENTOS6上的再安装

    作DUBBO时,肯定是需要的,,对的,,DUBBO也要熟悉一下才行啦.. URL: http://www.centoscn.com/CentosServer/test/2015/0120/4531.h ...

  5. android工程混淆和反编译

    一.工程文件的混淆 混淆文件下载:http://download.csdn.net/detail/lxq_xsyu/6328751 1.在根目录下添加progard.cfg文件 2.打开project ...

  6. guava function and predicate 函数式编程

    @Test public void function(){ List<String> list = Lists.newArrayList("1","2&quo ...

  7. C/C++中程序在使用堆内存时的内存复用问题

    在一个C/C++程序中,如果使用了堆内存的管理机制,那么内存究竟是怎么分配与回收的呢? 先看一个程序: #include <iostream> using namespace std; i ...

  8. Qt 与 JavaScript 通信

    使用QWebView加载网页后,解决Qt与JavaScript通信的问题: The QtWebKit Bridge :http://qt-project.org/doc/qt-4.8/qtwebkit ...

  9. Unity Twist Effect Black Hole

    Shader "Hidden/Twist Effect" {Properties { _MainTex ("Base (RGB)", 2D) = "w ...

  10. MVC5 学习整理

    一.概述 MVC简介: •       模型(Model) “数据模型”(Model)用于封装与应用程序的业务逻辑相关的数据以及对数据的处理方法.“模型”有对数据直接访问的权力,例如对数据库的访问.“ ...