首页 > 代码库 > 调试.NET程序OutOfMemoryException (转载)

调试.NET程序OutOfMemoryException (转载)

 

应用程序调试,需要有个常规的调试思路,应对各类问题最基本的调试手段是什么,不能一头雾水的上手而乱了阵脚,而且根据经验统计这些基本的步骤可以解决大多数的问题。

 

问题分类

 

第一种,应用程序不工作了。

第二种,应用程序反应很慢。


对于这样简单的描述我们一般需要进一步了解更多信息,比如

问题最直接的表现是什么? 

  • 浏览器显示网页报错信息 
  • Web Service调用报错信息

是否可以重现?如何重现?

围绕这个我们还可以问重现的频率如何,这是第一次发生么,在这之前是否有什么值得怀疑的改动?很多时候问题发生了并没有足够多的信息被记录下来。如果这个问题能够重复发生,我们就可以接下来拟定相应的数据收集和调试计划。如果能够知道如何重现,那么很多时候可以现场调试和抓取数据,可以搭建测试环境,甚至有的时候原因存在的层次可以通过如何重现问题推测出来,能够更加有效的解决问题。

发生问题的系统环境是什么?  

  • IIS 6 
  • IIS 7 
  • IIS 7.5 
  • IIS 8

了解问题发生的具体环境,不同的环境上面可以使用的工具不尽相同,不同的调试策略对应不同的环境。比如Failed request tracingIIS6上面就没办法使用,而只能选用ETW。负载均衡环境中如果只有单台服务器发生问题也可以对比下环境配置,很多时候区别之处隐含着问题发生的原因。

 

如何缩小问题范围,确定问题发生层级

  • 是否是客户端问题 
  • 是否是网络原因 
  • 是否是服务器底层服务问题
    • Tcp/ip
    • Http/Https
  • 是否是IIS问题 
  • 是否是应用程序本身问题 
  • 是否是应用程序所依赖的后台服务问题

 

调试工具

 

日志 

  1. Http error log-主要用来查看http级别上面记录的出错日志 
  2. IIS log-主要用来查看IIS上面发生的请求相关信息 
  3. Event log-查看程序异常信息以及系统日志

 

客户端工具 

  1. IE-客户端调试 
  2. Fiddler-追踪客户端http请求-Free 
  3. Httpwatch-追踪客户端http请求-Licensed 
  4. Wfetch-取代IE测试发送单独的http请求,可以自定义要发送的http头。 
  5. Network Monitor-追踪本机全部网络通讯 
  6. Wireshark-追踪本机全部网络通讯

 

服务端工具 

  1. Etw-系统级事件追踪,可以订阅不同的windows组件内建日志 
  2. Freb-IIS7及以上引入,基于Etw,追踪服务器端整个http请求的生命周期 
  3. Adplus-可以定义规则,抓hang/crash/breakpoint      dump 
  4. DebugDiag-可以定义规则,抓各种dump,集成dump分析功能 
  5. ProcDump-主要抓程序high cpu dump 
  6. Performance Counter-系统性能计数器 
  7. Process Monitor-可以记录程序访问文件/注册表/网络请求信息及相关调用栈信息 
  8. Poolmon-监测系统paged/non-paged pool内存泄露 
  9. SQL Profiler-追踪SQL语句执行过程 
  10. SSLDiag-检测服务器端SSL配置 
  11. DelegConfig-检测服务器Kerberos配置 
  12. Certutil-检测证书各种属性 
  13. Fushion Log-记录clr加载dll日志 
  14. CLR Profiler-追踪托管堆内存对象

 

离线调试工具 

  1. Windbg-分析dump,动态调试  
    1. Psscor-SOS更强大的托管程序调试扩展  
    2. SOS- .NETFramework自带的托管代码调试扩展  
    3. IISinfo-IIS调试扩展 
  2. Log Parser-解析Event Log, IIS log, HTTPlog等各种日志 
  3. Excel-Excel 
  4. ILSpy-根据Assembly查看托管代码 - Free 
  5. Reflector-根据Assembly查看托管代码 - Licensed

 

参考文档

Http API ErrorLogging

http://support.microsoft.com/kb/820729

HTTP Status Code inIIS 7 & 7.5

http://support.microsoft.com/kb/943891

Wikipedia internetprotocol suite

http://en.wikipedia.org/wiki/Internet_protocol_suite

Http protocol

http://www.w3.org/Protocols/ 

FTP protocol

http://tools.ietf.org/html/rfc959

SSL v3.0

http://tools.ietf.org/html/rfc6101

TLS v1.0

http://tools.ietf.org/html/rfc2246 

W3C Tutorial - HtmlXml CSS

http://www.w3schools.com/w3c/default.asp 

Windows development

http://msdn.microsoft.com/en-us/library/ee663300(v=vs.85) 

Classic ASP

http://msdn.microsoft.com/en-us/library/aa286483.aspx 

IIS.NET

http://www.iis.net/ 

ASP.NET

http://www.asp.net/

ASP.NET FAQs
http://msdn.microsoft.com/en-us/library/bb981440.aspx
Improving Web Application Security: Threats and Countermeasures
http://msdn.microsoft.com/en-us/library/aa302335.aspx
Security How Tos Index
http://msdn.microsoft.com/en-us/library/ms978512.aspx
Troubleshooting Performance Problems in SQL Server 2005
http://technet.microsoft.com/library/Cc966540
Performance Testing Guidance
http://perftesting.codeplex.com/wikipage?title=How%20Tos&referringTitle=Home&ProjectName=perftesting
Exceptional Performance
http://developer.yahoo.com/performance/
Improving .NET Application Performance and Scalability
http://msdn.microsoft.com/en-us/library/ms998530.aspx
Performance Testing Guidance for Web Applications
http://msdn.microsoft.com/en-us/library/bb924375.aspx
Fiddler PowerToy - Part 1: HTTP Debugging
http://msdn.microsoft.com/en-us/library/bb250446(v=vs.85).aspx
Fiddler PowerToy - Part 2: HTTP Performance
http://msdn.microsoft.com/en-us/library/bb250442.aspx

调试.NET程序OutOfMemoryException (转载)