Visual Studio调试技巧 -- Attach to Process

简介: 一般写完代码时,我们通常会启动调试运行一下看看是否正确,启动运行的方式无非是F5-- Start Debugging 或 Ctrl+F5-- Start Withour Debugging(注:不同版本或系统环境不同时,快捷键或有所变化),如下图1。不用说大家都能感觉到,使用Ctrl+F5调试时程序从启动到运行通常比使用F5快得多。使用Ctrl+F5时通常是想快速运行一遍,以便检查程序运行的结果是否符合预期。使用F5时通常是想查看代码内部的运行情况,以便检查到底是哪一步出了问题,或者所有参数是否都正确。

一般写完代码时,我们通常会启动调试运行一下看看是否正确,启动运行的方式无非是F5-- Start Debugging 或 Ctrl+F5-- Start Withour Debugging(注:不同版本或系统环境不同时,快捷键或有所变化),如下图1。不用说大家都能感觉到,使用Ctrl+F5调试时程序从启动到运行通常比使用F5快得多。使用Ctrl+F5时通常是想快速运行一遍,以便检查程序运行的结果是否符合预期。使用F5时通常是想查看代码内部的运行情况,以便检查到底是哪一步出了问题,或者所有参数是否都正确。(当然,运行Release版本的程序将比上述二者更快。那是因为编译器在将源代码编译成IL及机器码时加入了相应Debug策略的优化代码,而使用F5调试加入了更多相应的优化代码,所以你才能进行单步调试以及使用断点。)


微信图片_20220423142706.jpg


图1


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


       现在我们以一个大型的网站项目为例,在写完一段代码后,如果想通过启动运行来检查它的正确性,那么你不仅需要使用IDE对其进行编译(链接)(即F5或Ctrl+F5),还要将其部署到IIS服务器上(VS已替你自动完成,这时候你的右下角任务栏内会出现相应图标,如图2)。相比编译(链接)完成就可以直接运行的程序来说,以目前的处理器还是可以明显的感觉到二者启动速度的不同。


微信图片_20220423143122.jpg


                                                      图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。


微信图片_20220423143341.jpg


                                                         图3


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


微信图片_20220423143435.jpg


                                                         图4


     我把断点打在第106行,希望在一进入方法时就对代码进行跟踪, 然后选择"Debug"菜单中的”Attach to process"如上图1。然后,弹出选择菜单。如图5。


微信图片_20220423143615.jpg


                                                      图5


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


微信图片_20220423143735.jpg


                                                       图6


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


微信图片_20220423143832.jpg


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




相关文章
|
11月前
|
算法 安全 程序员
Visual Studio实用调试技巧---让你成为高端的程序员
Visual Studio实用调试技巧---让你成为高端的程序员
141 0
Visual Studio实用调试技巧---让你成为高端的程序员
|
11月前
|
存储 安全 NoSQL
Visual Studio 2022 你必须知道的实用调试技巧
大家好,前面我们讲了Visual Studio 2022的安装和使用以及scanf报错的解决方法 今天分享一些实用的 VS 技巧,而这些技巧很多人都不知道。当你以后在工作中遇到:我在同事电脑上解决问题,或在会议上演示代码示例时,使用了一些 VS “骚”操作,他们会好奇地问:你是怎么做到的?有时候你知道一些别人不知道的小技巧便可以让你显得更专业。 PS:本文所有示例演示均基于 Visual Studio 2022 版本。
210 0
|
11月前
|
NoSQL 编译器 程序员
Visual Studio2022编译器实用调试技巧
Visual Studio2022编译器实用调试技巧
|
安全 程序员 编译器
visual studio 2022调试技巧介绍(2)
1.什么是bug? bug是计算机领域专业术语,bug原意是“臭虫”,现在用来指代计算机上存在的漏洞,原因是系统安全策略上存在的缺陷,有攻击者能够在未授权的情况下访问的危害。 漏洞是在硬件、软件、协议的具体实现或系统安全策略上存在的缺陷,从而可以使攻击者能够在未授权的情况下访问或破坏系统。 2.调试是什么,如何调试? 2.1 调试的概念 调试简单来说就是调试是保证所提供的设备能够正常运行的必须程序。 通过一些工具对代码进行检测,修复bug。
118 0
visual studio 2022调试技巧介绍(2)
|
C语言 C++
【五一创作】Visual Studio常用调试技巧的温习
【五一创作】Visual Studio常用调试技巧的温习
80 0
|
安全 程序员 编译器
visual studio 2022调试技巧介绍(1)
1.什么是bug? bug是计算机领域专业术语,bug原意是“臭虫”,现在用来指代计算机上存在的漏洞,原因是系统安全策略上存在的缺陷,有攻击者能够在未授权的情况下访问的危害。 漏洞是在硬件、软件、协议的具体实现或系统安全策略上存在的缺陷,从而可以使攻击者能够在未授权的情况下访问或破坏系统。 2.调试是什么,如何调试? 2.1 调试的概念 调试简单来说就是调试是保证所提供的设备能够正常运行的必须程序。 通过一些工具对代码进行检测,修复bug。
291 0
|
编译器 程序员 C语言
你是真的“C”——Visual Studio 2022(VS2022)编译器 -—实用调试技巧(下)
4.多多动手,尝试调试,才能有进步。🙌 5. 一道经典面试题目,这里用调试进行演示分析:🙌 6. 如何写出好(易于调试)的代码。🙌 6.1 优秀的代码: 6.2 典型栗子示范: 6.3 const的作用 7. 编程常见的错误🙌 7.1 编译型错误 7.2 链接型错误 7.3 运行时错误 总结撒花💞
227 0
|
算法 程序员 编译器
你是真的“C”——Visual Studio 2022(VS2022)编译器 -—实用调试技巧(上)
前言🙌 1. 什么是bug?🙌 2. 调试是什么?有多重要?🙌 2.1 调试是什么? 2.2 调试的基本步骤 2.3 Debug和Release的介绍。 3. Windows环境调试介绍🙌 3.1 调试环境的准备 3.2 学会快捷键 3.3 调试的时候查看程序当前信息 3.3.1 查看临时变量的值 3.3.2 查看内存信息 3.3.3 查看调用堆栈 3.3.4 查看汇编信息 3.3.5 查看寄存器信息
439 0
|
C++
Visual Studio 原生开发的10个调试技巧(二)
原文:Visual Studio 原生开发的10个调试技巧(二)   我以前关于 Visual Studio 调试技巧的文章引起了大家很大的兴趣,以至于我决定分享更多调试的知识。以下的列表中你可以看到写原生开发的调试技巧(接着以前的文章来编号)。
1164 0