4

是否存在堆栈跟踪可以完全为空的情况?我收到了一个从机器事件属性复制的事件日志文本,其中包含以下内容:

说明:发生未处理的异常,进程已终止。

应用程序 ID:默认域

进程 ID:123

异常:System.OutOfMemoryException

消息:引发了“System.OutOfMemoryException”类型的异常。

堆栈跟踪

有关详细信息,请参阅http://go.microsoft.com/fwlink/events.asp上的帮助和支持中心。

堆栈跟踪对我来说看起来很可疑。我在论坛和文档上搜索了很多 - Stack Trace 没有任何内容是空的。只有 MSDN 提到“由于优化期间发生的代码转换(例如内联),StackTrace 属性可能不会像预期的那样报告尽可能多的方法调用。 ”但根本没有任何方法调用报告。

在我联系确认之前,我需要确定一下,因为这是一个多层次的沟通,需要时间来回复。

对我怀疑堆栈跟踪不能为空的任何更正?

4

2 回答 2

2

要在事件日志中创建消息,Exception.StackTrace必须检索字符串属性。计算此属性的值涉及创建一个 StackTrace对象。如果应用程序内存不足,这可能是不可能的,因为分配失败。这可以解释为什么缺少堆栈跟踪。

当应用程序内存不足时,甚至像日志记录这样的错误处理也可能由于缺乏资源而失败。在您的情况下,您至少知道触发失败是内存不足的情况。

于 2012-05-10T09:16:58.353 回答
2

有时,调用堆栈本身可能是 OOM 的原因(调用堆栈中太多)。

所以......你看到了问题。

或者堆可能已经耗尽,或者......或者,请参阅@Oded 评论!

于 2012-05-10T09:09:54.530 回答