程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> c# - catch(Exception ex) 會丟掉StackTrace 是怎麼回事?

c# - catch(Exception ex) 會丟掉StackTrace 是怎麼回事?

編輯:C#入門知識

StackTrace: 保存方法的棧調用信息。 什麼意思呢?A方法裡調用了B方法,B方法裡調用了C方法,你調用A方法的時候StackTrace裡就大概是這樣: at Project.Class.C in c:\aaa\Project\class.cs:line 10. at Project.Class.B in c:\aaa\Project\class.cs:line 20. at Project.Class.A in c:\aaa\Project\class.cs:line 30. 它就是個字符串。   不過他有什麼用呢?你說呢,畢竟人家連行號都告訴你了。如果丟了StackTrace,我們也就丟了這些信息。   什麼情況下會丟StackTrace?看看這段代碼:  

static void Main(string[] args)  
       {  
           try  
           {  
               // Call Method1  
               Console.WriteLine(Method1());  
           }  
           catch (Exception ex)  
           {  
               Console.WriteLine(ex.StackTrace);  
           }  
           Console.ReadLine();  
       }  
  
       public static int Method1()  
       {  
           try  
           {  
               return Method1_1();  
           }  
           catch (Exception ex)  
           {  
               throw ex;  
           }  
       }  
  
       public static int Method1_1()  
       {  
           int j = 0;  
           return 10 / j;  
       }  

 

  乍看貌似沒有什麼問題,但是Method1多做了一件事: Catch(Exception ex){thorw ex;} 他帶來一個後果就是,StackStace會丟.   得到的StackTrace如下:    at ExceptionMethodCall.Program.Method1() in c:\Projects\ExceptionMethodCall\ExceptionMethodCall\Program.cs:line 33    at ExceptionMethodCall.Program.Main(String[] args) in c:\Projects\ExceptionMethodCall\ExceptionMethodCall\Program.cs:line 16 刪除 try..catch, 我們得到的StackTrace如下:    at ExceptionMethodCall.Program.Method1_1() in c:\Projects\ExceptionMethodCall\ExceptionMethodCall\Program.cs:line 40    at ExceptionMethodCall.Program.Method1() in c:\Projects\ExceptionMethodCall\ExceptionMethodCall\Program.cs:line 29    at ExceptionMethodCall.Program.Main(String[] args) in c:\Projects\ExceptionMethodCall\ExceptionMethodCall\Program.cs:line 16 結果顯而易見。   結論:以後還亂加try..catch不了?

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved