如何调试w3wp clr.dll错误

cri*_*000 42 asp.net iis crash-reports w3wp

我的客户端在两个生产服务器上安装了一个ASP.NET应用程序(与NLB平衡,但这无关紧要).两个服务器每隔3-4小时就会崩溃,并显示以下事件查看器错误:

错误的应用程序名:w3wp.exe,版本:7.5.7601.17514,时间戳:0x4ce7afa2
错误模块名称:clr.dll,版本:4.0.30319.18034,时间戳:0x50b5a783
异常代码:0xc00000fd故障偏移:0x000000000001a840
出错进程ID:0xd50
断裂作用应用程序启动时间:0x01ce97fe076d27b4
错误应用程序路径:C:\ WINDOWS\SYSTEM32\INETSRV\w3wp.exe的
错误模块路径:C:\ WINDOWS\Microsoft.NET\Framework64\v4.0.30319\clr.dll报告编号:e0c90a5f-0455- 11e3-8f0e-005056891553

我不知道如何调试或从哪里开始.当崩溃即将发生时,服务器处理器的使用率会跃升至100%并保持不变.故障的过程是w3wp.exe.我甚至不确定我的代码是否产生了错误.这是IIS 7.5.任何指针都将非常感激.

Mik*_*Dev 71

看起来你有一个StackOverflow Exception,它是由无限递归(一个重复调用自身的函数等)引起的.这不能被常规的try/catch块捕获.您可以使用DebugDiagWinDbg跟踪问题.

可以将DebugDiag配置为在发生StackOverflowException时生成故障转储.从https://www.microsoft.com/en-us/download/details.aspx?id=49924下载.

  1. 打开DebugDiag,然后单击"添加规则".
  2. 应该已经选择了"崩溃".点击下一步.
  3. 选择"特定的IIS Web应用程序池",然后单击"下一步".
  4. 选择应用程序池,然后单击Next.
  5. 您应该在高级配置窗口中.单击"高级设置"下的"例外".
  6. 单击Add Exception并选择Stack Overflow,Action Type为Full Userdump
  7. 单击"确定"并保存并关闭.

下次发生StackOverflowException时,您将遇到崩溃转储.现在需要解释转储文件.

适用于Windows的调试工具是Windows SDK的一部分,可以从http://msdn.microsoft.com/en-US/windows/hardware/gg463009/下载 .

  1. 要使用WinDbg,您需要获取符号文件.下载符号文件并将其放在本地文件夹中.
  2. 打开WinDbg.在文件菜单上,单击符号文件路径.
  3. 在符号路径框中,文档说要键入以下命令:SRV*your local folder for symbols*http://msdl.microsoft.com/download/symbols,但是我只是放入符号的本地文件夹,它工作正常.
  4. 退出并再次打开WinDbg,然后打开Crash Dump并找到DebugDiag创建的转储文件.
  5. 在命令行中,键入 .loadby sos clr
  6. 现在输入 !CLRStack

在结果中,应该清楚问题是什么(你可能会看到一行显示重复被调用的函数的行).

  • 这是一篇非常棒的文章.帮助我找到烦人的IIS SO的底部. (3认同)