.NET应用程序调试—原理、工具、方法(5)

来源:未知 责任编辑:责任编辑 发表时间:2015-05-17 16:44 点击:

使用!Threads命令可以查看进程内所有的托管线程,仅仅是托管线程,此命令是无法查看非托管线程的,接下来我们使用另外一个命令来查看所有的线程。

图9:(所有的执行时线程)

wKiom1Q-ebejddSMAAIXAq-lNgg481.jpg

这样我们就可以判断出,调试器使用了ID位7的作为目前的调试会话线程。知道这些背后的原理很重要,当你在执行某个调试命令时你就会发现此命令是否需要在.NET线程中执行,还是说可以在调试器会话线程中执行,一般dump类的命令都是可以远程执行的,也就是说在调试器会话中执行,当需要跟踪.NET线程内部过程时就需要切换到.NET线程上去执行。

2.4.VisualStudio中集成扩展调试(更加细粒度的调试程序)

SOS扩展也是可以和VisualStudio进行集成的,这样真的方便了我们调试一些性能要求比较高的程序,当程序运行一段时间后我们用VS附加到进程,然后查看一些重要的对象数据,但是此时我们看不到.NET运行时的一些数据,比如:对象的代龄,托管堆的大小,线程池的任务等。通过集成SOS扩展会让我们对程序的运行时有了一个更加方便的跟踪。

图10:(打开本地代码调试)

wKioL1Q-egWRdimyAAGKjcBzMkE197.jpg

设置断点,然后在”即时窗口“(调试->窗口->即时)中加载扩展SOS.DLL。

图11:(在VisualStudio2012中加载SOS.dll扩展)wKiom1Q-ed2R9xTdAAIMld2DyBY681.jpg

这样的便利性大大提高我们在调试程序内存方面、线程方面的好处,我们可以适当的做压力测试,然后Attach process,执行SOS扩展命名来查看内存问题,当需要调试程序逻辑时在单步调式C#代码,一举两得。

3.调试程序类型(客户端程序、服务端程序)

.NET程序主要分为两类,一类是客户端程序,另一类是服务端程序。对于这两类程序来说前者调试时基本上可以通过附加进程的方式进行调试,而对于服务端程序则不行,因为服务程序通常是运行在一个复杂的线上环境中,我们没有任何权限或机会去接触,此时是通过获取进程的dump文件来进行分析。

客户端程序也大概分为控制台、Winform两种,服务端程序都是基于ASP.NET框架,宿主与IIS进程中。

4.调试方式及场景

针对不同类型的程序及场景需要使用不同的方式进行调试,客户端程序中的控制台程序基本上可以通过在调试器中启动的方式进行调试。如果是GUI程序则需要附加进程方式。服务端程序如果在条件允许下也是可以使用附加进程的方式进行调试的,但是这一般不太可能,因为一旦附加进程将block住所有的线程活动。

4.1.本机调试(Attach Process,调试器启动)

本机调试可以直接在调试器中启动程序,WinDbg打开后,在文件中有一个Open Executable,可以打开一个可执行文件。如果是使用NTSD控制台调试器,则需要在NTSD后面跟上程序的执行路径。

发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码:点击我更换图片
最新评论 更多>>

推荐热点

  • 用C#制作屏幕捕获程序
  • 遍历ArrayList易犯错误
  • 使用C#编写LED样式时钟控件
  • C#对XML操作:一个处理XML文件的类(1)
  • 怎样用C#实现完整文档打印功能
  • DataList嵌套问题 如何删除内层子DataList的记录
  • 使用c#+(datagrid控件)编辑xml文件
  • C#生成CHM文件(应用篇)之代码库编辑器(5)【总结、程序、源代码】
  • .NET简谈自定义事务资源管理器
网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索 - 移动版 - 返回顶部
Copyright © 2008-2015 计算机技术学习交流网. 版权所有

豫ICP备11007008号-1