2

我遇到了一个特别讨厌的错误,其中一个ASP.NET网站试图调用一个WCF服务方法,将IIS发送到死亡螺旋......最终将关联的应用程序池关闭。它从来没有得到我们的log4net代码输出未处理的异常。如何在Visual Studio 2010中调试ASPNET工作进程的转储文件?

我在看的w3wp.exe过程旋转起来和死亡,所以我想我会采取使用ProcDump from SysInternals使用以下命令终止转储文件:

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

这让我一个小型转储文件,其中我可以在VS2010中打开,它显示了堆信息存在。这是令人兴奋的:

Minidump Summary

所以在这一点上,我试图设置符号路径,这是该特定网站的bin文件夹。我已经从适当的服务器上复制下来了。不过,我仍然只能选择使用Native Only进行调试,当我这样做时找不到任何适当的符号

这是我的PDB位置设置:

PDB Options

我不知道这是因为调用堆栈似乎在Windows DLL停止的地方...?这是一个调用堆栈窗口的屏幕。

Call Stack

不管怎样,我的最后一个问题是我是否已经遵守了寻找这个异常的源适当的路径,并且,如果是这样,我缺少什么?它似乎在非托管代码中,但我仍然喜欢在所有内容爆炸之前看到最后一次托管呼叫。

此外,万一它有帮助,网络服务器是Win2003 x86,我的电脑是Win7 x64。

谢谢!

回答

2

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

1

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

+0

我同意我遇到的所有文献都非常SOS沉重,显然这是一个非常接受的方式去。我感兴趣的是如何让VS2010让这个过程变得不那么痛苦。 – 2010-09-30 15:28:45