2

我遇到了一个特别讨厌的错误,其中 ASP.NET 网站试图调用 WCF 服务方法,该方法将 IIS 送入死亡螺旋……最终导致相关的应用程序池崩溃。它永远不会到达输出未处理异常的 log4net 代码。

我正在看着 w3wp.exe 进程启动并死掉,所以我想我会使用SysInternals 的 ProcDump使用以下命令在终止时获取一个转储文件:

procdump -e -t -ma <PID> aspnet.dmp

这给了我一个 minidump 文件,我可以在 VS2010 中打开它,它告诉我堆信息是存在的。令人兴奋的是:

小型转储摘要

因此,此时我尝试设置符号路径,即该特定网站的 bin 文件夹。我已经从相应的服务器上复制了它。但是,我仍然只能选择 Debug with Native Only ,当我这样做时,它找不到任何适当的符号

这是我的 PDB 位置设置:

PDB 选项

我不确定这是否是因为调用堆栈似乎停止在 Windows DLL 中的某处......?这是调用堆栈窗口的屏幕。

调用堆栈

无论如何,我的最终问题是我是否正在遵循适当的路径来查找此异常的来源,如果是,我错过了什么?它似乎在非托管代码中,但我仍然希望在一切爆炸之前看到最后一个托管调用。

另外,如果有帮助,Web服务器是Win2003 x86,我的PC是Win7 x64。

谢谢!

4

2 回答 2

2

我也遇到过这个。VS2010 不会对托管应用程序的转储文件进行良好、友好的调试,除非它是崩溃的 .NET 4.0 可执行程序集。

于 2010-09-18T05:24:04.847 回答
1

我总是更喜欢 winDbg 来分析转储。另外,我建议您查看 MSFT 的 Debug Diags。这是一个 Windows 服务,它将监视您的应用程序并在崩溃前创建转储。这将确保您的转储具有您需要的信息。获得转储后,将其加载到 WinDbg 并使用 SOS 扩展 DLL 中的工具来查找问题。

于 2010-08-23T14:52:27.410 回答