以下は、.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 には循環呼び出しがまったくないため、それがどのように発生するかを知りたいと思っています。循環呼び出しは、巨大なスタック トレースを引き起こす可能性があると私が考えることができる唯一のものです。
他の誰かが同様の状況に遭遇しましたか?