C#等同于Java的Exception.printStackTrace()?

时间:2008-12-02 13:45:38

标签: c# .net exception stack-trace

是否存在与Java Exception.printStackTrace()的C#等效方法,还是我必须自己编写一些东西,通过InnerExceptions工作?

8 个答案:

答案 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的端口。