C#是否等效于Java的Exception.printStackTrace()?


83

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

Answers:


120

试试这个:

Console.WriteLine(ex.ToString());

http://msdn.microsoft.com/zh-cn/library/system.exception.tostring.aspx

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

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


1
刚刚在Linux上的.Net Core 2.1中进行了尝试,现在看来,这不再是真的了
selalerer


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()



0

是否没有C#日志记录API可以将Exception作为参数来为您处理一切,就像Java的Log4J一样?

即,使用Log4NET。


我认为这指出了为什么Microsoft可能没有提供Java提供的C#功能(是在更简单的时间内开发了较旧的语言)。即,建议使用更好的方法。
JeeBee

0

由于@ ryan-cook答案对我不起作用,因此,如果要在没有异常的情况下打印堆栈跟踪,可以使用:

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

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


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.