2008-12-02 155 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);