NET应用程序调试—原理、工具、方法

阅读目录:

  • 1.背景介绍
  • 2.基本原理(Windows调试工具箱、.NET调试扩展SOS.DLL、SOSEX.DLL)
    • 2.1.Windows调试工具箱
    • 2.2..NET调试扩展包,SOS.DLL、SOSEX.DLL
    • 2.3.调试系统的基本流程及架构(.NETDAC概念、mscordacwks.dll)
    • 2.4.VisualStudio中集成扩展调试(更加细粒度的调试程序)
  • 3.调试程序类型(客户端程序、服务端程序)
  • 4.调试方式及场景
    • 4.1.本机调试(Attach Process,调试器启动)
    • 4.2.不中断调试或者称事后调试(对Dump文件进行调试)
  • 5.一般调试步骤
    • 5.1.设置符号文件(公有符号、私有符号)
    • 5.2.加载.NET程序扩展调试包(SOS.DLL、SOSEX.DLL)
    • 5.3.调试的三种命令类型(标准命令、元命令、扩展命令)
  • 6.调试扩展的几个比较常用的命令(SOS.DLL、SOSEX.DLL)
  • 7.简单示例,常见的线上两类问题
    • 7.1.内存问题(内存偏高,内存溢出)
    • 7.2.线程问题(CPU过高,线程死锁)
  • 8.获取Dump文件时的重要注意事项
  • 9.总结

1.背景介绍

http://c.tieba.baidu.com/p/3392933442
http://c.tieba.baidu.com/p/3392940474
http://c.tieba.baidu.com/p/3392948214
http://c.tieba.baidu.com/p/3392954889
http://c.tieba.baidu.com/p/3392961801
http://c.tieba.baidu.com/p/3392968280
http://c.tieba.baidu.com/p/3392974353
http://c.tieba.baidu.com/p/3392980509
http://c.tieba.baidu.com/p/3392986542
http://c.tieba.baidu.com/p/3392992535
http://c.tieba.baidu.com/p/3392998666
http://c.tieba.baidu.com/p/3393004740
http://c.tieba.baidu.com/p/3393010920
http://c.tieba.baidu.com/p/3393016880
http://c.tieba.baidu.com/p/3393021482
http://c.tieba.baidu.com/p/3393017531
http://c.tieba.baidu.com/p/3393011388
http://c.tieba.baidu.com/p/3393027106
http://c.tieba.baidu.com/p/3393053976
http://c.tieba.baidu.com/p/3393027106
http://c.tieba.baidu.com/p/3393060946
http://c.tieba.baidu.com/p/3393068852
http://c.tieba.baidu.com/p/3393060946
http://c.tieba.baidu.com/p/3393074635
http://c.tieba.baidu.com/p/3393075936
http://c.tieba.baidu.com/p/3393053976
http://c.tieba.baidu.com/p/3393082662
http://c.tieba.baidu.com/p/3393088289
http://c.tieba.baidu.com/p/3393093781
http://c.tieba.baidu.com/p/3393099259
http://c.tieba.baidu.com/p/3393104841
http://c.tieba.baidu.com/p/3393110118
http://c.tieba.baidu.com/p/3393115345
http://c.tieba.baidu.com/p/3393120475
http://c.tieba.baidu.com/p/3393125593
http://c.tieba.baidu.com/p/3393130563
http://c.tieba.baidu.com/p/3393135504
http://c.tieba.baidu.com/p/3393078933
http://c.tieba.baidu.com/p/3393075936
http://c.tieba.baidu.com/p/3393091871
http://c.tieba.baidu.com/p/3393093781
http://c.tieba.baidu.com/p/3393098093
http://c.tieba.baidu.com/p/3393098093
http://c.tieba.baidu.com/p/3393102566
http://c.tieba.baidu.com/p/3393085191
http://c.tieba.baidu.com/p/3393108962
http://c.tieba.baidu.com/p/3393113979
http://c.tieba.baidu.com/p/3393118658
http://c.tieba.baidu.com/p/3393124867
http://c.tieba.baidu.com/p/3393129650
http://c.tieba.baidu.com/p/3393135103
http://c.tieba.baidu.com/p/3393155246

随着应用程序的复杂度不断上升,要想将好的设计思想稳定的落实到线上,我们需要具备解决问题的能力。需要具备对运行时的错误进行定位且快速的解决它的能力。本篇文章我将分享一下我对.NET应用程序调试方面的学习和使用总结。

其实对调试程序的使用是不难的,关键是知道它的调试原理才行,因为调试一个程序或者dump文件,都需要了解一定的.NET调试的原理 才行,比如你在附加到进程调试时在执行某个SOS扩展命令是需要切换到指定线程上的,而调试dump文件就不需要,但是对Dump文件的分析有些SOS扩 展命令是不能用的,类似这样的问题,一旦出现你就一头雾水,所以花点时间学习一下原理是有必要的。

2.基本原理(Windows调试工具箱、.NET调试扩展SOS.DLL、SOSEX.DLL)

在Windows平台上调试应用程序首选Windows调试工具箱,该工具箱包含了一套专门用来针对Windows进行很多复杂场景调 试所需要的工具和组件。需要注意的是此工具箱是针对于非托管.NET平台用的,意思就是说此工具箱的所有工具和组件默认是不能够进行.NET应用程序调试 的,只能用来对原生Windows程序进行调试。

那么.NET平台也并不是有自己一套专用的调试工具箱,毕竟.NET还是属于Windows平台的,所以很大部分的运行时原理还是基于 Windows的,要想在原生的调试器中对.NET这个具有虚拟运行时程序进行调试就需要专门的翻译器才能够执行。SOS.DLL、SOSEX.DLL这 两个就是用来对.NET程序在Windows调试工具中起到翻译作用的调试器扩展。简单讲就是,这两个组件是.NET项目组专门开发出来用来对.NET应 用程序进行方便调试用的,当然不用这两个扩展也能调试.NET程序,只不过就会很困难,会被很多细节束缚住。有了这个调试扩展之后,我们就可以让原生 Windows调试器正确的翻译出.NET相关概念。

图1:(Windows调试工具执行流程)

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。