下面是来自 .NET 应用程序的一些日志记录输出。
Error in MainFunction.
Message: Exception of type 'System.OutOfMemoryException' was thrown.
InnerException:
StackTrace: at System.Text.StringBuilder.ToString()
at System.Diagnostics.StackTrace.ToString(TraceFormat traceFormat)
at System.Environment.GetStackTrace(Exception e, Boolean needFileInfo)
at System.Exception.GetStackTrace(Boolean needFileInfo)
at System.Exception.ToString(Boolean needFileLineInfo)
at System.Exception.ToString()
[the rest of the trace is removed]
对应于以下应用程序代码行。以下是在一个 catch 块中,并将字符串返回给实际抛出的方法:
private void MainFunction()
{
...
try
{
string doc = CreateXMLDocument(); // <- Out of Memory throws here
}
catch (Exception ex)
{
CoreLogging("Error in MainFunction.", ex);
}
}
private string CreateXMLDocument()
{
try
{
//Some basic and well constrained XML document creation:
...
}
catch (Exception ex)
{
return "Exception message: " + ex.ToString(); // <- This is the last line of the trace
}
}
我该怎么办?显然Exception.Message
应该用来代替Exception.ToString()
,但我仍然想理解这一点。做
- 在 System.Text.StringBuilder.ToString()
- 在 System.Diagnostics.StackTrace.ToString(TraceFormat traceFormat)
是否意味着 CreateXMLDocument 中异常的堆栈跟踪如此庞大导致 OutOfMemory?我很想知道这将如何发生,因为 CreateXMLDocument 中绝对没有循环调用,这是我能想到的唯一可能导致巨大堆栈跟踪的事情。
有没有其他人遇到过类似的情况?