是否有与 Java 等效的 C# 方法,Exception.printStackTrace()
还是我必须自己编写一些东西,通过 InnerExceptions 工作?
8 回答
试试这个:
Console.WriteLine(ex.ToString());
从http://msdn.microsoft.com/en-us/library/system.exception.tostring.aspx:
ToString的默认实现获取抛出当前异常的类名、消息、内部异常调用ToString的结果、调用Environment.StackTrace的结果。如果这些成员中的任何一个为 null,则其值不包含在返回的字符串中。
请注意,在上面的代码中,调用ToString
不是必需的,因为有一个直接System.Object
调用和调用的重载ToString
。
我想补充一点:如果要在异常之外打印堆栈,可以使用:
Console.WriteLine(System.Environment.StackTrace);
正如 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()
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 库中完成
另请查看 Log4Net ...它是 Log4J 到 .NET 的一个端口。