web-dev-qa-db-ja.com

JavaのException.printStackTrace()と同等のC#?

JavaのException.printStackTrace()に相当するC#メソッドがありますか、それともInnerExceptionsを処理しながら自分で何かを記述する必要がありますか?

76
Epaga

これを試して:

Console.WriteLine(ex.ToString());

http://msdn.Microsoft.com/en-us/library/system.exception.tostring.aspx から:

ToStringのデフォルト実装は、現在の例外をスローしたクラスの名前、メッセージ、内部例外でToStringを呼び出した結果、およびEnvironment.StackTraceを呼び出した結果を取得します。これらのメンバーのいずれかがnullの場合、その値は返される文字列に含まれません。

上記のコードでは、System.Objectを取り、ToStringを直接呼び出すオーバーロードがあるため、ToStringの呼び出しは必要ありません。

112
Drew Noakes

追加したい:例外の外でスタックを印刷したい場合は、次を使用できます:

Console.WriteLine(System.Environment.StackTrace);
88
Ryan Cook

ドリューが言うように、例外を文字列に変換するだけでこれを行います。たとえば、このプログラム:

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()
10
Jon Skeet
2
nbevans
  catch (Exception ex)
{
    Console.WriteLine(ex.StackTrace);
}
1

JavaのLog4Jのように、例外を引数として受け取り、すべてを処理できるC#ロギングAPIはありませんか?

つまり、Log4NETを使用します。

0
JeeBee