繁体   English   中英

在WebService(ASP.NET)中获取StackOverflowException

[英]Getting StackOverflowException in WebService (ASP.NET)

我有一个名为ECService.asmx的WebService,其中包含230多个WebMethod。 当我将这些方法分为几个“ asmx”或注释掉一半代码时,StackOverflowException将不再发生。

根据MSDN:

当执行堆栈由于太多的嵌套方法调用而溢出时,将引发StackOverflowException异常。

我很确定我没有任何递归方法。 他们要做的就是在调用时返回一个数据集,仅此而已。

因此,我进行了一些研究,并说服了使用任何工具来提取进程的完整用户转储(iisexpress),然后使用windbg工具检查了登录到其中的堆栈树。 我尝试使用Visual Studio 2017的选项“调试>将转储另存为...”来捕获完整的用户转储:

kbn
.loadby sos clr
!CLRStack

然后我得到了

0:033> !CLRStack
OS Thread Id: 0x584 (33)
Child SP       IP Call Site
06b625a8 77a21d3c [FaultingExceptionFrame: 06b625a8] 
06b9ef00 77a21d3c [InlinedCallFrame: 06b9ef00] 
06b9f540 77a21d3c [InlinedCallFrame: 06b9f540] 
06b9f53c 65cce181 DomainNeutralILStubClass.IL_STUB_PInvoke(IntPtr, System.Web.RequestNotificationStatus ByRef)
06b9f540 65c7b892 [InlinedCallFrame: 06b9f540] System.Web.Hosting.UnsafeIISMethods.MgdIndicateCompletion(IntPtr, System.Web.RequestNotificationStatus ByRef)
06b9f574 65c7b892 System.Web.Hosting.PipelineRuntime.ProcessRequestNotificationHelper(IntPtr, IntPtr, IntPtr, Int32)
06b9f578 65c7b39f [InlinedCallFrame: 06b9f578] 
06b9f670 65c7b39f System.Web.Hosting.PipelineRuntime.ProcessRequestNotification(IntPtr, IntPtr, IntPtr, Int32)
06b9f748 05aeeb10 [ContextTransitionFrame: 06b9f748] 

但是我几乎没有发现任何与StackOverflowException相关的东西。 老实说,我已经不知道该做什么了……

我还尝试使用Debug Diagnostic Tool捕获完整的转储,但从未触发我设置的规则“所有IIS / COM +相关进程的崩溃规则”。 我做错了吗? 如果我错过任何事情,我想提供更多信息。

(对不起,由于业务敏感性,我可能无法包括完整文件。 现在我在一家商业公司实习,经理问我,我不能使用任何机械的解决方法来忽略此问题。

研究参考:

异常代码:0xc00000fd。 调试StackOverflowException

使用Windbg解决问题

我现在没有.NET堆栈溢出故障转储,但是这是我的记忆:

!threads命令应列出.NET线程。 如果线程上存在异常,则该线程在“异常”列中应有一个指示器。 使用~<number>s切换到该线程,然后使用!clrstack

由于.NET异常也是普通的SEH异常,因此它也应从本机端运行。 如果您使用导航线程命令~ ,则应该有一个标记为#的线程,该线程表示具有异常的线程。 如果看不到,则可能是活动线程,因为活动线程指示器. 覆盖异常指示器。 在任何情况下,您都应该能够使用~#s切换到该线程,但不能例外(实际上,不能用数字替换#)。

堆栈空间是否真正耗尽,应该可以使用!teb命令并查看堆栈的基本和堆栈限制。 然后将其与堆栈指针(ESP regiser)进行比较。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM