91

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

4

8 回答 8

129

试试这个:

Console.WriteLine(ex.ToString());

http://msdn.microsoft.com/en-us/library/system.exception.tostring.aspx

ToString的默认实现获取抛出当前异常的类名、消息、内部异常调用ToString的结果、调用Environment.StackTrace的结果。如果这些成员中的任何一个为 null,则其值不包含在返回的字符串中。

请注意,在上面的代码中,调用ToString不是必需的,因为有一个直接System.Object调用和调用的重载ToString

于 2008-12-02T13:48:45.107 回答
111

我想补充一点:如果要在异常之外打印堆栈,可以使用:

Console.WriteLine(System.Environment.StackTrace);
于 2008-12-04T08:32:23.247 回答
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()
于 2008-12-02T13:52:18.453 回答
3

http://msdn.microsoft.com/en-us/library/system.exception.stacktrace.aspx

Console.WriteLine(myException.StackTrace);

于 2008-12-02T13:49:14.310 回答
2
  catch (Exception ex)
{
    Console.WriteLine(ex.StackTrace);
}
于 2008-12-02T13:50:07.710 回答
0

是否没有 C# Logging API 可以将异常作为参数并为您处理所有事情,就像 Java 的 Log4J 一样?

即,使用 Log4NET。

于 2008-12-02T13:47:21.397 回答
0

由于@ryan-cook 的回答对我不起作用,如果你想打印堆栈跟踪而不出现异常,你可以使用:

System.Diagnostics.StackTrace stackTrace = new System.Diagnostics.StackTrace();
Console.WriteLine(stackTrace)

不幸的是,这不能在 PCL 或 .NETStandard 库中完成

于 2020-01-27T11:51:17.757 回答
-1

另请查看 Log4Net ...它是 Log4J 到 .NET 的一个端口。

于 2008-12-02T13:52:59.577 回答