您的位置:首页 > 编程语言 > ASP

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

2011-11-28 09:44 525 查看
新上线的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的相
4000
关资料。









四、根据以上图片的显示,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,转帖请注明出处。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息