Подтвердить что ты не робот

С# эквивалентно Java Exception.printStackTrace()?

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

4b9b3361

Ответ 1

Попробуйте следующее:

Console.WriteLine(ex.ToString());

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

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

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

Ответ 2

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

Console.WriteLine(System.Environment.StackTrace);

Ответ 3

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

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()

Ответ 5

  catch (Exception ex)
{
    Console.WriteLine(ex.StackTrace);
}

Ответ 6

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

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

Ответ 7

Также посмотрите на Log4Net... его порт Log4J на .NET.