在C#中是否有与Java的Exception.printStackTrace()
相当的方法,还是我必须自己编写代码,通过处理InnerExceptions来实现?
在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
。
我想补充一下:如果你想在异常以外的情况下打印堆栈,可以使用以下方法:
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#日志API,就像Java的Log4J一样?
即使用Log4NET。
由于 @ryan-cook 的回答对我无效,如果您想在没有异常的情况下打印堆栈跟踪,可以使用以下方法:
System.Diagnostics.StackTrace stackTrace = new System.Diagnostics.StackTrace();
Console.WriteLine(stackTrace)
很遗憾,这无法在PCL或.NETStandard库中完成。
也可以看看Log4Net,它是Log4J到.NET的移植版本。