Visual Studio debugger是一个很棒的调试工具,可以帮助程序猿们快速地发现和解决问题。这里给大家简单介绍一下VS调试工具中的七个鲜为人知的小功能。

1.    一键跳转到指定语句

调试过程中经常需要拖拽黄箭头,使特定语句执行或者不执行。常规方法就是使用鼠标直接拖拽。

在Visual Studio 2017 15.3预览版中,有一个更简单地跳转到目标行的方法:在目标行盘旋鼠标指针,出现绿色竖线右箭头图标后,按住CTRL后鼠标左键点击,就把调试黄箭头移过去了,再点击调试下一步或者F5就直接在指定行运行了。

2.    添加指定实例值的断点

有时候某个实例的属性值会莫名其妙的变化,当我们需要知道为什么变化的时候,会在属性代码中添加断点,但是这会对所有实例都生效。

在调试的时候,可以使用Make Object ID和Conditional Breakpoint功能去添加指定实例的断点,具体如下:

  • 首先我定义了一个类,并初始化了两个对象,更改PointX的值,想要添加实例a的PointX值的改变断点

  • 在调试过程中,右击实例a选择Make Object ID

  • 这时实例a被赋值到$1中,在要添加的断点出右击选择Conditions…

  • 添加$1 == this代码后,再运行程序,则在实例a属性改变的时候断点生效,实例b属性改变的时候不生效了。

注意Make Object ID记录的是内存中对象的地址,下次调试的时候就改变了,需要重新设置。

3.    重新附加进程

Attach to Process是大家经常需要用的功能,Visual Studio 2017中有一个新的选项叫做Reattach to Process,可以方便大家重新附加到最近一次附加到的进程上。

先附加到一个进程上,点击Stop Debugging,然后再点击Debug就能看到里面的Reattach to Process选项了。

4.    显示所有的线程

在调试过程中,调试工具栏中有一个新的选项叫做:Show Threads in Source。点击后即可在有线程停止的代码行前显示一个图标,鼠标停留在图标上显示线程,右击图标可以显示可用操作。

注意这个功能可能影响调试效率,如果不需要的话建议默认关闭。

5.    临时禁用指定断点

当进行多线程调试的时候,可以利用Disable Breakpoint功能临时禁用指定断点,防止其它线程由于断点中断,影响当前线程的调试工作。

6.    查看所有线程的调用栈

调试过程中,在Command Window中输入”Debug.ListCallStack -AllThreads”,即可看到所有线程的调用栈。

也可以用WinDBG命令”~*k”:

7.    使用无负面效果的方法评估

有时候可能需要在调试Watch窗口中查看一个方法的返回值,但是真正执行这个方法的时候可能会产生负面效果,这里可以在Watch窗口输入的时候添加”, nse”来避免负面效果,是”No Side Effects”的缩写。例子如下:

刚开始Add执行了六次,所以testList总数是6,

现在想查看Add当前执行的返回值,可以在Watch窗口输入Add(1),但是这会产生负影响,改变testList的值为7,

因此如果想不影响testList的原始值,则需要加上”, nse”,如下显示是8,但是testList原始值未变还是7:

介绍到此为止,有你喜欢的调试小功能么,欢迎来评论~

PS:只是介绍,不喜勿喷。

[原创文章,转载请注明出处,仅供学习研究之用,如有错误请留言,如觉得不错请推荐,谢谢支持]

[原文:http://www.cnblogs.com/lavender000/p/7098321.html,来自永远薰薰]

Visual Studio Debugger中七个鲜为人知的小功能的更多相关文章

  1. Visual Studio Debugger

    Visual Studio Debugger中七个鲜为人知的小功能   Visual Studio debugger是一个很棒的调试工具,可以帮助程序猿们快速地发现和解决问题.这里给大家简单介绍一下V ...

  2. Visual Studio 2010 中的 Web 开发

    概述 Microsoft Visual Studio 2010 为 ASP.NET Web 应用程序的开发提供非常多新的功能.这些新功能旨在帮助开发者高速方便地创建和部署质量高且功能全的 Web 应用 ...

  3. SharePoint Framework 在Visual Studio Code中调试你的本地解决方案

    博客地址:http://blog.csdn.net/FoxDave Visual Studio Code不知道大家都有没有,界面清爽,编辑快速,是一个非常好的前端开发工具.本文介绍如何使用Goog ...

  4. [.net 面向对象程序设计进阶] (27) 团队开发利器(六)分布式版本控制系统Git——在Visual Studio 2015中使用Git

    [.net 面向对象程序设计进阶] (26) 团队开发利器(六)分布式版本控制系统Git——在Visual Studio 2015中使用Git 本篇导读: 接上两篇,继续Git之旅 分布式版本控制系统 ...

  5. 如何在Visual Studio 2012中发布Web应用程序时自动混淆Javascript

    同Java..NET实现的应用程序类似,Javascript编写的应用程序也面临一个同样的问题:源代码的保护.尽管对大多数Javascript应用公开源代码不算是很严重的问题,但是对于某些开发者来说, ...

  6. 在Visual Studio 2012中使用VMSDK开发领域特定语言(二)

    本文为<在Visual Studio 2012中使用VMSDK开发领域特定语言>专题文章的第二部分,在这部分内容中,将以实际应用为例,介绍开发DSL的主要步骤,包括设计.定制.调试.发布以 ...

  7. 在Visual Studio 2012中使用VMSDK开发领域特定语言(一)

    前言 本专题主要介绍在Visual Studio 2012中使用Visualization & Modeling SDK进行领域特定语言(DSL)的开发,包括两个部分的内容.在第一部分中,将对 ...

  8. Visual Studio Code中文文档(一)-快速入门

    Visual Studio Code是一个轻量级但是十分强大的源代码编辑器,重要的是它在Windows, OS X 和Linux操作系统的桌面上均可运行.Visual Studio Code内置了对J ...

  9. Visual Studio 2015中快捷键总结

    今天总结了Visual Studio工具中常用的快捷键,可供平时参考查阅. 程序调试相关的快捷键F5: 启动调试Ctrl+F5: 开始执行(不调试)Shift+F5: 停止调试Ctrl+Shift+F ...

随机推荐

  1. Redis学习-Sentinel

    Redis的Sentinel系统用于管理多个Redis服务器(instance), 该系统执行以下三个任务: 监控(Monitoring):Sentinel会不断地检查你的主服务器和从服务器是否运作正 ...

  2. 【转】MyISAM和InnoDB 区别

    InnoDB和MyISAM是MySQL最常用的两个表类型,这两个表类型各有优劣,视具体应用而定.基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持.MyISAM类型的表强调 ...

  3. Java并发编程:Callable、Future和FutureTask的实现

    启动线程执行任务,如果需要在任务执行完毕之后得到任务执行结果,可以使用从Java 1.5开始提供的Callable和Future 下面就分析一下Callable.Future以及FutureTask的 ...

  4. 【JAVAWEB学习笔记】14_response

    HttpServletResponse 学习目标 案例一.完成文件下载 案例二.生成验证码(了解) 1.HttpServletResponse概述 我们在创建Servlet时会覆盖service()方 ...

  5. 彻底搞清函数中的this指向

    近日阅读<javascript设计模式与开发实践> 书中的apply和call调用函数层出不穷,很多妙用: 函数中的this是根据调用方式来决定的 函数调用方式有4中 1.直接调用 a(. ...

  6. 开涛spring3(3.1) - DI的配置使用

    3.1.1  依赖和依赖注入 传统应用程序设计中所说的依赖一般指“类之间的关系”,那先让我们复习一下类之间的关系: 泛化:表示类与类之间的继承关系.接口与接口之间的继承关系: 实现:表示类对接口的实现 ...

  7. 1.搭建Maven 多模块应用 --Intellij IDEA 2016.3.5

    1.打开IDEA,file->new ->project  新建工程 2.建成的项目如下图,然后新建java class 模块: 右击工程名->new -> Module 3. ...

  8. 浅谈 Java 主流开源类库解析 XML

    在大型项目编码推进中,涉及到 XML 解析问题时,大多数程序员都不太会选用底层的解析方式直接编码. 主要存在编码复杂性.难扩展.难复用....,但如果你是 super 程序员或是一个人的项目,也不妨一 ...

  9. [编织消息框架][netty源码分析]2 eventLoop

    eventLoop从命名上看是专门处理事件 事件系统主要由线程池同队列技术组成,有以下几个优点 1.任务出队有序执行,不会出现错乱,当然前提执行线程池只有一个 2.解偶系统复杂度,这是个经典的生产者/ ...

  10. Jmeter Boss系统login

    之前说,想学习并且掌握自动化测试,但是,折腾过来折腾过去,逐渐意识到了,app自动化测试分为UI层面还有接口测试.(其实,功能测试就是UI+接口测试的集合,当然,只是我自己这么认为,hhhhhhh) ...