Javaと同等のC#メソッドはありException.printStackTrace()
ますか、それともInnerExceptionsを処理しながら、自分で何かを作成する必要がありますか?
回答:
これを試して:
Console.WriteLine(ex.ToString());
http://msdn.microsoft.com/en-us/library/system.exception.tostring.aspxから:
ToStringのデフォルトの実装は、現在の例外をスローしたクラスの名前、メッセージ、内部例外でToStringを呼び出した結果、およびEnvironment.StackTraceを呼び出した結果を取得します。これらのメンバーのいずれかがnullの場合、その値は返される文字列に含まれません。
上記のコードToString
ではSystem.Object
、ToString
直接呼び出しを行うオーバーロードがあるため、への呼び出しは必要ありません。
Drewが言うように、例外を文字列に変換するだけでこれが行われます。たとえば、このプログラムは次のとおりです。
using System;
class Test
{
static void Main()
{
try
{
ThrowException();
}
catch (Exception e)
{
Console.WriteLine(e);
}
}
static void ThrowException()
{
try
{
ThrowException2();
}
catch (Exception e)
{
throw new Exception("Outer", e);
}
}
static void ThrowException2()
{
throw new Exception("Inner");
}
}
この出力を生成します:
System.Exception: Outer ---> System.Exception: Inner
at Test.ThrowException2()
at Test.ThrowException()
--- End of inner exception stack trace ---
at Test.ThrowException()
at Test.Main()
http://msdn.microsoft.com/en-us/library/system.exception.stacktrace.aspx
Console.WriteLine(myException.StackTrace);
JavaのLog4Jのように、引数として例外を受け取り、すべてを処理できるC#ロギングAPIはありませんか?
つまり、Log4NETを使用します。
@ ryan-cookの回答が機能しなかったため、例外なくスタックトレースを出力する場合は、次を使用できます。
System.Diagnostics.StackTrace stackTrace = new System.Diagnostics.StackTrace();
Console.WriteLine(stackTrace)
残念ながら、これはPCLまたは.NETStandardライブラリでは実行できません。