是否存在堆栈跟踪可能完全为空的情况? 我收到了从机器事件属性复制的事件日志文本,其中包含以下内容:
说明:发生了未处理的异常,并且该流程已终止。
应用程序ID :DefaultDomain
进程ID :123
异常:System.OutOfMemoryException
消息:抛出了“System.OutOfMemoryException”类型的异常。
StackTrace :
有关详细信息,请参阅http://go.microsoft.com/fwlink/events.asp上的“帮助和支持中心”。
Stack Trace看起来很可疑。我在论坛和文档上搜索了很多 - 没有任何关于Stack Trace是空的。只有MSDN提到“ StackTrace属性可能不会报告与预期一样多的方法调用,因为代码转换(例如内联)在优化期间发生。”但根本没有任何方法调用报告。
在我联系回来确认之前我需要确定,因为这是一个多层沟通,并且需要时间来回应...
我怀疑堆栈跟踪不能为空的任何更正?
答案 0 :(得分:2)
有时,callstack本身可能是OOM的原因(在调用堆栈中太多)。
所以......你看到了问题。
或者堆可能已用尽,或者......或者,请参阅@Oded comment!
答案 1 :(得分:2)
要在事件日志中创建消息,必须检索字符串属性Exception.StackTrace
。计算此属性的值涉及创建新 StackTrace
对象。如果应用程序内存不足,则可能无法实现,因为分配失败。这可以解释为什么缺少堆栈跟踪。
当应用程序内存不足时,即使是日志记录等错误处理也可能因资源不足而失败。在你的情况下,你至少知道引发故障的是内存不足的情况。