9

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

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

发生此崩溃时,我在哪里可以找到崩溃转储进行分析?

4

2 回答 2

16

下载适用于 Windows 的调试工具:http: //www.microsoft.com/whdc/DevTools/Debugging/default.mspx

Windows 调试工具有一个脚本 (ADPLUS),允许您在进程崩溃时创建转储:http: //support.microsoft.com/kb/286350

该命令应该类似于(如果您使用的是 IIS6):

cscript adplus.vbs -crash -pn w3wp.exe

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

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

默认情况下,WinDBG 将显示(在命令行旁边)进程崩溃的线程。

在 WinDBG 中需要做的第一件事是加载 .NET Framework 扩展:

.loadby sos mscorwks

然后,您将显示托管调用堆栈:

!clrstack

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

kpn 200

这应该会给你一些想法。要继续进行故障排除,我建议您阅读以下文章:

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

于 2008-09-15T20:29:59.543 回答
1

快速搜索发现IISState - 它依赖于Windows 调试工具,需要在发生崩溃时运行,但鉴于您描述的情况,这应该不是问题,

于 2008-09-10T05:14:30.363 回答