2008-09-10 81 views
7

我在我的ASP.NET应用程序中做了一些坏事。它可能是我正在使用的任意数量的CTP库,或者我只是没有正确地处理某些东西。但是,当我重新部署我的ASP.NET到我的Vista IIS7安装或我的服务器的IIS6安装时,我崩溃了IIS工作进程。获取IIS工作进程崩溃转储

我将问题缩小到了我的HTTP爬虫,这是一个多线程的野兽,当被问到时它会抓取网站的有用信息。在我启动爬虫程序并重新部署应用程序之后,而不是正常卸载appDomain并重新加载后,IIS工作进程将崩溃(弹出崩溃消息)并继续重新加载应用程序域。

发生此次崩溃时,我可以在哪里找到用于分析的崩溃转储?

+0

这些[演示](http://blogs.msdn.com/tess/pages/net-debugging-demos-information-and-setup-instructions.aspx)应该能够帮助你。 – 2008-09-10 05:31:30

回答

15

下载调试工具Windows系统: http://www.microsoft.com/whdc/DevTools/Debugging/default.mspx

Windows调试工具已经有一个脚本(ADPlus的),它允许你创建转储当进程崩溃: http://support.microsoft.com/kb/286350

的命令应该是someth (如果您使用的是IIS6):

cscript adplus.vbs -crash -pn w3wp.exe 

此命令将调试器附加到工作进程。当发生崩溃时,它将生成一个转储(一个* .DMP文件)。

您可以在WinDBG中打开它(也包含在Windows调试工具中)。文件>打开崩溃转储...

默认情况下,WinDBG会显示您(紧挨着命令行)线程是进程崩溃。

你需要在WinDbg中做的第一件事就是加载.NET框架的扩展:

.loadby sos mscorwks 

那么,你会显示调用堆栈管理:

!clrstack 

如果线程不运行托管代码,那么您需要检查本地堆栈:

kpn 200 

这应该是gi给你一些想法。要继续解决,我建议你阅读下面的文章:

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

+1

FYI adplus.vbs已被最新版本的Windows调试工具中的adplus.exe所取代。 – 2010-03-29 22:18:02

2

快速搜索发现IISState - 它依赖于Windows debugging tools,需要时发生崩溃时在运行,但鉴于你所描述的情况,这不应该是一个问题,