91

C# に相当する Java のメソッドはありException.printStackTrace()ますか、それとも InnerExceptions を介して自分で何かを作成する必要がありますか?

4

8 に答える 8

129

これを試して:

Console.WriteLine(ex.ToString());

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

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

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

于 2008-12-02T13:48:45.107 に答える
111

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

Console.WriteLine(System.Environment.StackTrace);
于 2008-12-04T08:32:23.247 に答える
10

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

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()
于 2008-12-02T13:52:18.453 に答える
3

http://msdn.microsoft.com/en-us/library/system.exception.stacktrace.aspx

Console.WriteLine(myException.StackTrace);

于 2008-12-02T13:49:14.310 に答える
2
  catch (Exception ex)
{
    Console.WriteLine(ex.StackTrace);
}
于 2008-12-02T13:50:07.710 に答える
0

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

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

于 2008-12-02T13:47:21.397 に答える
-1

また、Log4Net を見てください... Log4J の .NET へのポートです。

于 2008-12-02T13:52:59.577 に答える