from:http://www.cnblogs.com/lyosaki88/p/3481338.html

  一般写完代码时,我们通常会启动调试运行一下看看是否正确,启动运行的方式无非是F5-- Start Debugging

或 Ctrl+F5-- Start Withour Debugging(注:不同版本或系统环境不同时,快捷键或有所变化),

如下图1。不用说大家都能感觉到,使用Ctrl+F5调试时程序从启动到运行通常比使用F5快得多。

使用Ctrl+F5时通常是想快速运行一遍,以便检查程序运行的结果是否符合预期。使用F5时通常是想查看代码内部的运行情况,

以便检查到底是哪一步出了问题,或者所有参数是否都正确。(当然,运行Release版本的程序将比上述二者更快。

那是因为编译器在将源代码编译成IL及机器码时加入了相应Debug策略的优化代码,而使用F5调试加入了更多相应的优化代码,所以你才能进行单步调试以及使用断点。)

图1

假如你的代码只有一行打印输出“Hello, World!",当然适用任何调试策略

现在我们以一个大型的网站项目为例,在写完一段代码后,如果想通过启动运行来检查它的正确性,

那么你不仅需要使用IDE对其进行编译(链接)(即F5或Ctrl+F5),

还要将其部署到IIS服务器上(VS已替你自动完成,这时候你的右下角任务栏内会出现相应图标,如图2)。

相比编译(链接)完成就可以直接运行的程序来说,以目前的处理器还是可以明显的感觉到二者启动速度的不同。


图2 

一般出现的两种情况是,若使用Ctrl+F5进行调试,程序一旦运行起来,出现BUG会弹出错误页面显示系统抛出的异常,

但大多数情况下仅仅根据这一个页面往往无法断定到底是哪里出了问题,所以又要重新使用F5进行调试。

但这种方法有一个优点就是即使程序报错,IIS不会关闭,假如出现问题的是一段javascript代码,那么你只需要直接在代码上修改后保存,

再在网页上刷新即可查看最新的调试结果,无需重新启动部署IIS。

  若使用F5进行调试,那么每次都必须重新启动部署IIS,相当耗时,而程序在运行过程中一旦报错,

IDE会自动退出跟踪并关闭IIS。而程序在出现问题的时候,往往不是一次两次F5就可以解决问题的,

而且每次你重新运行又要重新操作一次需要预先进行的步骤,这耗费的时间真的让人蛋疼。好处就是你可以看到到底是哪里出了什么问题。

  还有一种需要使用F5进行调试的情况是,有时系统会抛出这样一些异常,不知是出于安全原因还是处于某种不为人知的原因,

他会告诉你程序出现了错误,但具体错误请你查看InnerException,而这个InnerException是Exception类的一个Property,

你只有通过IDE找到这个Exception并打开它的InnerException才能知道它到底出了什么问题。。。纠结。

使用AttachToProcess意味着将程序的运行和代码的跟踪分离。具体过程如下(以一个网站为例),

   首先我使用Ctrl+F5将整个程序(网站)快速启动运行起来,对其进行操作,直到我希望对代码进行跟踪的地方,如图3。

        
图3

       
   图3中,若我点击添加,将调用程序的POST方法,对左侧选中的节点”烟气脱硫技术的适用性“添加一个名为”测试指标1“的子节点。 
此时,由于我使用的是Ctrl+F5,所以若我直接点击”添加“按钮,程序不会产生任何中断而是直接运行。这里我先将需要跟踪的代码打好断点,如图4。
 
图4

        我把断点打在第106行,希望在一进入方法时就对代码进行跟踪, 然后选择"Debug"菜单中的”Attach to process"如上图1。然后,弹出选择菜单。如图5。
 
 图5
 
      这里我选择的是名称为”iisexpress.exe"的进程,即图5中颜色加深的那一行。
  因为Web项目的代码是部署到IIS上的(具体是编译后部署dll等到IIS上,还是直接部署源代码可能存在多种情况,
您可以参考http://technet.microsoft.com/zh-cn/cc437689关于Web项目的编译和部署或其他资料进行深入研究)。
 
  点击Attach之后,整个IDE界面便进入跟踪调试模式,如图6.

图6

此时我再点击网页上的“添加”按钮,即可从断点开始调试,如图7.

 
图7.
 
      如上图,断点被命中,方法确实传入了名称为我刚才输入的“测试指标1”的模型。
  如此,即可开始对代码进行跟踪,直到完成本次调试,即可以点击停止调试。注意:即使在跟踪的过程中程序出现BUG无法继续运行下去需要退出,
或者手动退出了调试,IIS也不会关闭,对网站的运行不会产生任何影响。你只需要在需要调试的时候对IIS进程使用Attach to process功能即可。 
 
  具体使用时还有一些技巧,比如说,我Ctrl+F5运行程序,运行到需要跟踪时,Attach to process,
结果发现需要改后台代码,此时关闭跟踪,修改后台代码后进行Rebuild,此时不要关闭IIS和浏览器,
直接使用Ctrl+F5,就省去了重启IIS的步骤,也能节省相当的时间,只需要让程序重新部署,打开网页后,
可以直接从上一个窗口需要跟踪的那一步直接进行Attach to process开始操作。        
 
PS:关于调试时的窗口常用的是ImmediateWindow以及Watch窗口,ImmediateWindow用来即时调试(查看变量,调用函数等都可以),而Watch用来观察生命周期内的变量等。 而VS默认启动的BreakPoints用处不大,而IntelliTrace则跟底层IL等相关如无需求都可以关闭。

Visual Studio调试技巧 -- Attach to Process #Reprinted#的更多相关文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  8. Visual Studio 调试技巧

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

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

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

随机推荐

  1. Struts 上下文

    Struts  上下文 ActionContext .ServletActionContext 是继承关系  ActionContext  ActionContext context = Action ...

  2. [cpp]伯乐在线编程挑战第 0 期 – 呼叫转移系统

    题目: 描述 呼叫转移服务是一个把呼叫号码A转移到号码B的服务.举个例子:当你正在度假时,这样的系统非常有帮助.A君度假去了,那么,A君的工作电话可以通 过呼叫转移至B君.更进一步讲,当B君也正好在度 ...

  3. NYOJ 14 会场安排问题(也算是经典问题了)

    会场安排问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述 学校的小礼堂每天都会有许多活动,有时间这些活动的计划时间会发生冲突,需要选择出一些活动进行举办.小刘的工作就 ...

  4. 吝啬的国度(dfs+vector)

    吝啬的国度 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来.现在,Tom在第S号城市, ...

  5. ANDROID自己定义视图——onLayout源代码 流程 思路具体解释

    转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! 简单介绍: 在自己定义view的时候.事实上非常easy.仅仅须要知道3步骤: 1.測量- ...

  6. WebSite 文件上传Demo

    知识点: 1 <!--上传文件时:        1.必须使用Post方式来提交数据        2.必须设置表单的enctype属性        3.必须在表单中包含文件域.input t ...

  7. android五种布局模式

    Android布局是应用界面开发的重要一环,在Android中,共有五种布局方式,分别是:LinearLayout (线性布局),FrameLayout(框架布局),AbsoluteLayout(绝对 ...

  8. 关于appcompat v7出现的问题

    一.问题描述: 新建了一个MIN-SDK为API 8的工程之后,TARGET-SDK为API 17的Android工程之后,自动生成的appcompat v7会提示“v7/value21:no res ...

  9. IOS 表视图(UITableVIew)的使用方法(6)表视图的编辑功能(新增Add)

    表视图的新增功能和删除功能虽然目的不同,但是工作流程是相似的 下面列出在处理新增的回调函数时,与删除所不同的逻辑部分代码. 显示下过如下: #pragma mark #pragma mark Tabl ...

  10. linux下挂载第二块硬盘

    1.第一步:添加硬盘/新建分区(fdisk) a.查看当前系统所有硬盘及分区情况:fdisk -lb.在指定的硬盘(例:/dev/sda)上创建分区:fdisk /dev/sda , 根据提示进行下一 ...