2008-12-02 160 views

回答

87

试试这个:

Console.WriteLine(ex.ToString()); 

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

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

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

0

是否没有C#Logging API可以将Exception作为参数并处理所有内容,比如Java的Log4J呢?

即,使用Log4NET。

+0

很好的问题:) – Epaga 2008-12-02 13:48:34

+3

这是一个很好的问题,但它不是一个很好的答案 – 2008-12-02 13:55:17

+0

我认为它指出了为什么微软可能没有在C#中提供Java这样的功能(是在更简单的时代开发的旧语言)。也就是说,推荐一种更好的方法。 – JeeBee 2008-12-02 13:58:02

1
catch (Exception ex) 
{ 
    Console.WriteLine(ex.StackTrace); 
} 
9

正如德鲁所说,只是将异常转换为字符串。举例来说,此程序:

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

也期待在log4net的...它Log4J的上的端口.NET。

69

我想补充:如果你要打印一个例外之外堆栈,你可以使用:

Console.WriteLine(System.Environment.StackTrace);