Есть ли в C # метод, эквивалентный Java, Exception.printStackTrace()
или мне нужно что-то писать самому, работая с InnerExceptions?
Ответы:
Попробуй это:
Console.WriteLine(ex.ToString());
Из http://msdn.microsoft.com/en-us/library/system.exception.tostring.aspx :
Реализация ToString по умолчанию получает имя класса, который вызвал текущее исключение, сообщение, результат вызова ToString для внутреннего исключения и результат вызова Environment.StackTrace. Если любой из этих членов имеет значение NULL, его значение не включается в возвращаемую строку.
Обратите внимание, что в приведенном выше коде вызов ToString
не требуется, поскольку существует перегрузка, которая принимает System.Object
и вызывает ToString
напрямую.
Как говорит Дрю, это делает простое преобразование исключения в строку. Например, эта программа:
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()
http://msdn.microsoft.com/en-us/library/system.exception.stacktrace.aspx
Console.WriteLine (myException.StackTrace);
catch (Exception ex)
{
Console.WriteLine(ex.StackTrace);
}
Нет ли C # Logging API, который мог бы принимать исключение в качестве аргумента и обрабатывать все за вас, как это делает Java Log4J?
Т.е. используйте Log4NET.
Поскольку ответ @ ryan-cook у меня не сработал, если вы хотите распечатать трассировку стека без исключения, вы можете использовать:
System.Diagnostics.StackTrace stackTrace = new System.Diagnostics.StackTrace();
Console.WriteLine(stackTrace)
К сожалению, это невозможно сделать в PCL или в .NETStandard Library.