Visual Studio调试技巧 -- Attach to Process #Reprinted#

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等相关如无需求都可以关闭。

时间: 2024-10-10 12:26:10

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

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

简介 调试是软件开发周期中很重要的一部分.它具有挑战性,同时也很让人疑惑和烦恼.总的来说,对于稍大一点的程序,调试是不可避免的.最近几年,调试工具的发展让很多调试任务变的越来越简单和省时. 这篇文章总结了可能节省你大量时间的十个visual studio的调试技巧和方法. 1 悬停鼠标查看表达式值 调试是很有挑战性的.比如在函数内逐步运行可以看出哪里出错,查看堆栈信息可以知道函数被谁调用等等... 但是无论哪种情况下,查看表达式和局部变量的值都是很麻烦的(把表达式和局部变量放到watch窗口里)

Visual Studio调试之断点技巧篇补遗

原文链接地址:http://blog.csdn.net/Donjuan/article/details/4649372 讲完Visual Studio调试之断点技巧篇以后,翻翻以前看得一些资料和自己写的一些文章,发现还有几个关于中断程序的技巧在前面的文章里面遗漏了,决定还是在这里总结一下.当然啦,如果你知道这些技巧,忽略这篇文章好了,:) 在程序启动的时候将调试器附加上去 可能有人会对这个问题有一些争议,因为大部分情况下我们只需要在调试器(Debugger)里面直接启动被调试程序(Debugge

Visual Studio调试的10个技巧

本篇体验Visual Studio的10个调试技巧,包括: 1.插入断点和断点管理2.查看变量信息3.逐语句F11,逐过程F10,跳出Shift+F114.查看堆栈信息5.设置下一条执行语句6.调试时修改局部变量并继续调试7.线程管理8.为断点设置条件9.使用命令窗口测试方法10.变量的历史记录 有这样的一个Person类: public class Person { public string Name { get; set; } public int Age { get; set; } pu

Visual Studio调试之断点技巧篇

原文链接地址:http://blog.csdn.net/Donjuan/article/details/4618717 函数断点 在前面的文章Visual Studio调试之避免单步跟踪调试模式里面我讲了如何设置函数断点,说实话,我个人喜欢设置函数断点,而不是在代码行里面设置断点.一般来说,函数断点在下面几种情形下有用: 1. 例如调试一个网站程序,你通过分析网站的日志发现最有可能发生错误的函数,打开调试器并将调试器附加到程序上去,设置函数断点,重新执行网站--这样做的好处是,不用到处打开源文件

[转]Visual Studio调试之符号文件

http://www.cnblogs.com/killmyday/archive/2009/10/14/1582882.html 前面在不能设置断点的检查步骤和Visual Studio调试之断点进阶篇提到了调试符号文件及其作用,这篇文章我将要介绍调试符号文件的一些用法,如果你已经很熟悉调试文件的话,尽可以跳过本文. 调试符号文件为调试器提供了从二进制机器代码地址到源代码文本文件代码行的映射.因此有了符号文件,我们才能: 1.       设置断点,因为调试器需要符号文件提供的映射关系,将源代码

Visual Studio调试之避免单步跟踪调试模式

Visual Studio调试之避免单步跟踪调试模式 写完Visual Studio调试之断点进阶篇之后,想分享一下我常用的一些调试技巧,后面发现写之前,一些背景知识需要介绍一下. 下面是几篇今年2月份在CSDN写的几篇文章,比如关于如何使用第一次异常处理机会和第二次异常处理机会的区别来快速定位异常发生的位置,如何设置函数断点之类的文章.因为后续我打算写几篇我常用的小技巧,可能需要先了解一些背景知识,就只把链接贴出来了.理解First Chance和Second Chance避免单步调试:htt

提高你开发效率的十五个 Visual Studio 使用技巧

提高你开发效率的十五个 Visual Studio 使用技巧 相信做开发的没有不重视效率的.开发C#的都知道,我们很依赖VS,或者说,我们很感谢VS.能够对一个IDE产生依赖,说明这个IDE确实 有它的独特之处.无容置疑,VS是一个非常强大的IDE,它支持多语言编辑.支持C#,VB,C/C++,HTML......它拥有强大的调试编译功能.它让我们不用去记住那些安装,环境变量设置,服务器设置,编译的繁琐过程.高度集成化.凡事有利有弊,在敏捷开发盛行的时代,VS是否值得我们使用是 无容置疑的.但是

Visual Studio调试之断点进阶篇

Visual Studio调试之断点进阶篇 在上一篇文章Visual Studio调试之断点基础篇里面介绍了什么是断点,INT 是Intel系列CPU的一个指令,可以让程序产生一个中断或者异常.程序中如果有中断或者异常发生了以后,CPU会中断程序的执行,去一个叫做IDT的部件查找处理这个中断(或者异常)的例程(Handler).IDT是操作系统在启动的时候初始化的,至于IDT的细节问题,例如什么是IDT,怎样编写一个IDT的例程,怎样 初始化IDT,可以去网上搜索一些资料. 总之,这里我们只要知

用Natvis定制C++对象在Visual Studio调试时如何显示

博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:用Natvis定制C++对象在Visual Studio调试时如何显示.