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调试加入了更多相应的优化代码,所以你才能进行单步调试以及使用断点。)
假如你的代码只有一行打印输出“Hello, World!",当然适用任何调试策略
现在我们以一个大型的网站项目为例,在写完一段代码后,如果想通过启动运行来检查它的正确性,
那么你不仅需要使用IDE对其进行编译(链接)(即F5或Ctrl+F5),
还要将其部署到IIS服务器上(VS已替你自动完成,这时候你的右下角任务栏内会出现相应图标,如图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。