是否存在与Java Exception.printStackTrace()
的C#等效方法,还是我必须自己编写一些东西,通过InnerExceptions工作?
答案 0 :(得分:108)
试试这个:
Console.WriteLine(ex.ToString());
来自http://msdn.microsoft.com/en-us/library/system.exception.tostring.aspx:
ToString的默认实现获取抛出当前异常的类的名称,消息,在内部异常上调用ToString的结果,以及调用Environment.StackTrace的结果。如果这些成员中的任何一个为null,则其值不包含在返回的字符串中。
请注意,在上面的代码中,不需要调用ToString
,因为重载需要System.Object
并直接调用ToString
。
答案 1 :(得分:83)
我想补充一点:如果要在异常之外打印堆栈,可以使用:
Console.WriteLine(System.Environment.StackTrace);
答案 2 :(得分:10)
正如Drew所说,只是转换异常一个字符串就可以了。例如,这个程序:
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()
答案 3 :(得分:2)
http://msdn.microsoft.com/en-us/library/system.exception.stacktrace.aspx
Console.WriteLine(Exception.Stack Trace);
答案 4 :(得分:1)
catch (Exception ex)
{
Console.WriteLine(ex.StackTrace);
}
答案 5 :(得分:0)
是否没有C#Logging API可以将Exception作为参数并为您处理一切,例如Java的Log4J?
即,使用Log4NET。
答案 6 :(得分:0)
由于@ ryan-cook答案对我不起作用,因此,如果您要在没有异常的情况下打印堆栈跟踪,则可以使用:
System.Diagnostics.StackTrace stackTrace = new System.Diagnostics.StackTrace();
Console.WriteLine(stackTrace)
不幸的是,这不能在PCL或.NETStandard库中完成
答案 7 :(得分:-1)
另请参阅Log4Net ...它是一个Log4J到.NET的端口。