Чи існує метод 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);
}
Чи не існує API реєстрації C #, який може взяти виняток як аргумент і обробити все за вас, як це робить Log4J від Java?
Тобто використовуйте Log4NET.
Оскільки відповідь @ ryan-cook не спрацювала для мене, якщо ви хочете надрукувати трасування стека без виключення, ви можете використовувати:
System.Diagnostics.StackTrace stackTrace = new System.Diagnostics.StackTrace();
Console.WriteLine(stackTrace)
На жаль, цього неможливо зробити в PCL або в бібліотеці .NETStandard