C# эквивалентно исключению Java.printStackTrace ()?


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

7 63

7 ответов:

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

Console.WriteLine(ex.ToString());

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

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

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

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

Console.WriteLine(System.Environment.StackTrace);

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

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()
  catch (Exception ex)
{
    Console.WriteLine(ex.StackTrace);
}

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

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

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