使用windbg调试iis应用程序池崩溃的asp.net 2.0 bug.

新上线的asp.net 2.0 项目,不定时的报告以下错误:

Faulting application w3wp.exe, version 6.0.3790.3959, stamp 45d6968e, faulting module kernel32.dll, version 5.2.3790.4480, stamp 49c51ee2, debug? 0, fault address 0x0000bef7

并使iis应用程序池崩溃,在windows的事件日志中,有上述错误报告。

一、从微软官网下载WinDbg,我下载的版本是:dbg_x86_6.11.1.404.msi,请注意其中的x86或x64的描述。

二、配置windbg
打开软件,选择File->Symbol File Path,设置路径地址为:srv*c:\symbols*http://msdl.microsoft.com/download/symbols

三、关闭windbg窗口,执行cmd,进入windbg的安装目录,使用adplus.vbs设置iis应用程序池的监控。

adplus -crash -p 4456 -fullonfirst -o g:\debug -quiet

参数说明:-crash,告诉adplus,是调试崩溃。
-p 4456,指定iis应用程序池的windows进程号,如果不清楚所调试应用程序池的进程号,可以在cmd下使用iisapp查看。
-fullonfirst,第一次崩溃的时候,记录详细日志。
-o g:\debug,设置日志输出目录
-quiet,静默模式

关于adplus的更多参数,可以查阅csdn的相关资料。

四、根据以上图片的显示,adplus已经成功运行,可以看到,其实adplus调用最终执行的是另外一个程序cdb.exe,adplus只是一个vbs脚本。然后等待应用程序池崩溃吧,只需要在第一次崩溃结束后,使用windbg分析由adplus(cdb.exe)产生的日志即可。

五、分析日志

分析日志前,请把C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\加入到环境变量的path中。也可以把这个目录下的sos.dll复制到windbg的安装目录。

使用windbg打开g:\debug目录下的dmp文件,通常崩溃记录在所有日志文件中,较靠后的文件。

打开dmp文件后,执行

kb
.load sos
!clrstack

通常的asp.net异常,就能在其中找出问题所在了,我所碰到的此bug,是因为一个小递归程序导致的。

以上文章来自:32yx.com,文章地址:http://www.32yx.com/?p=341 联系QQ:301109640,转帖请注明出处。

你可能感兴趣的:(Asp/Asp.net)