空StackTrace。可能?

时间:2012-05-10 09:05:45

标签: c# stack-trace

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

  
    

说明:发生了未处理的异常,并且该流程已终止。

         

应用程序ID :DefaultDomain

         

进程ID :123

         

异常:System.OutOfMemoryException

         

消息:抛出了“System.OutOfMemoryException”类型的异常。

         

StackTrace

         

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

  

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

在我联系回来确认之前我需要确定,因为这是一个多层沟通,并且需要时间来回应...

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

2 个答案:

答案 0 :(得分:2)

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

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

或者堆可能已用尽,或者......或者,请参阅@Oded comment!

答案 1 :(得分:2)

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

当应用程序内存不足时,即使是日志记录等错误处理也可能因资源不足而失败。在你的情况下,你至少知道引发故障的是内存不足的情况。