微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

asp.net – 如何调试w3wp clr.dll错误

我的客户端在两个生产服务器上安装了一个ASP.NET应用程序(与NLB平衡,但这是不相关的)。
两个服务器每3-4小时崩溃,并发生以下事件查看器记录的错误

Faulting application name: w3wp.exe,version: 7.5.7601.17514,time stamp: 0x4ce7afa2
Faulting module name: clr.dll,version: 4.0.30319.18034,time stamp: 0x50b5a783
Exception code: 0xc00000fd Fault offset: 0x000000000001a840
Faulting process id: 0xd50
Faulting application start time: 0x01ce97fe076d27b4
Faulting application path: c:\windows\system32\inetsrv\w3wp.exe
Faulting module path: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll Report Id: e0c90a5f-0455-11e3-8f0e-005056891553

我不知道如何调试或从哪里开始。当崩溃即将发生时,服务器处理器使用率跳转到100%,并保持在那里。进程故障是w3wp.exe。我甚至不确定我的代码是否生成错误或不。这是IIS 7.5。任何指针将非常感谢。

解决方法

看起来你有一个StackOverflow异常,这是由无界递归(一个函数反复调用自己,等等)引起的。这不能被常规try / catch块捕获。你可以使用DebugDiag和WinDbg跟踪问题。

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

>打开DebugDiag,然后单击添加规则。
>“崩溃”应该已经被选中。点击下一步。
>选择“特定IIS Web应用程序池”,然后单击下一步。
>选择应用程序池,然后单击下一步。
>您应该在高级配置窗口。单击高级设置下的例外。
>单击添加例外并选择堆栈溢出,其操作类型为完全用户转储
>单击确定并保存并关闭

下次发生StackOverflowException时,您将有一个崩溃转储。现在需要解释dump文件

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

>要使用WinDbg,您需要获取符号文件Download the symbol files并将其放在本地文件夹中。
>打开WinDbg。在“文件菜单上,单击“符号文件路径”。
>在符号路径框中,文档说要键入以下命令:SRV *您的本地文件夹的符号* http://msdl.microsoft.com/download/symbols,但是我只是放在本地文件夹的符号和它工作正常。
>退出并再次打开WinDbg,并打开崩溃转储并找到由DebugDiag创建的转储文件
>在命令行中,键入.loadby sos clr
>现在输入!Clrstack

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

原文地址:https://www.jb51.cc/aspnet/254283.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐