C # эквивалент Java Exception.printStackTrace ()? - PullRequest
74 голосов
/ 02 декабря 2008

Существует ли C # -эквивалентный метод для Java Exception.printStackTrace() или я должен что-то написать сам, пробираясь через InnerExceptions?

Ответы [ 7 ]

108 голосов
/ 02 декабря 2008

Попробуйте это:

Console.WriteLine(ex.ToString());

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

Реализация по умолчанию ToString получает имя класса, выдавшего текущее исключение, сообщение, результат вызова ToString для внутреннего исключения и результат вызова Environment.StackTrace. Если какой-либо из этих членов имеет значение null, его значение не включается в возвращаемую строку.

Обратите внимание, что в приведенном выше коде вызов ToString не требуется, поскольку существует перегрузка, которая принимает System.Object и вызывает ToString напрямую.

83 голосов
/ 04 декабря 2008

Я хотел бы добавить: если вы хотите распечатать стопку вне исключения, вы можете использовать:

Console.WriteLine(System.Environment.StackTrace);
10 голосов
/ 02 декабря 2008

Как говорит Дрю, просто конвертируя исключение, строка делает это. Например, эта программа:

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()
2 голосов
/ 02 декабря 2008
1 голос
/ 02 декабря 2008
  catch (Exception ex)
{
    Console.WriteLine(ex.StackTrace);
}
0 голосов
/ 02 декабря 2008

Также посмотрите на Log4Net ... это порт Log4J для .NET.

0 голосов
/ 02 декабря 2008

Нет ли C # Logging API, который мог бы принимать Исключение в качестве аргумента и обрабатывать все для вас, как это делает Java4 Log4J?

Т.е., используйте Log4NET.

...