2014-02-26 26 views
0

當我寫這篇文章的代碼找到行發生錯誤爲什麼堆棧跟蹤幀不總是包含文件名和行號?

// Case 1 
try 
{ 
    var error= Convert.ToInt32("fdafa"); 
} 
catch(Exception ex) 
{ 
    StackTrace trace = new StackTrace(ex, true); 
    string fileName = trace.GetFrame(0).GetFileName(); 
    int lineNo = trace.GetFrame(0).GetFileLineNumber(); 
} 

// Case 2 
try 
{ 
    throw new Exception(); 
} 
catch(Exception ex) 
{ 
    StackTrace trace = new StackTrace(ex, true); 
    string fileName = trace.GetFrame(0).GetFileName(); 
    int lineNo = trace.GetFrame(0).GetFileLineNumber(); 
}  

它運行正常,當我拋出異常喜歡這個(從Case 2

throw new Exception(); 

但任何其他作弄象這樣的錯誤(從Case 1

var error= Convert.ToInt32("fdafa"); 

會拋出異常,我得到響應空從fileName和0從lineNo

這兩種情況有什麼區別?

+0

這是另一個不起作用的代碼? –

+0

您能否讓您的問題標題更具體些? –

+0

對不起,我沒有找到具體的標題,你可以給一些建議嗎? – altandogan

回答

2

它的發生是因爲如果你拋出這樣的異常throw new Exception();你知道引發異常的類,因爲它是你創建它的,並且你有代碼。

如果通過類似Convert.ToInt32("fdafa")的框架方法引發異常,您不知道代碼,因此無法輸入行號和文件名。 也許,如果你上了一個框架(trace.GetFrame(1))你的班級調用了錯誤的方法,你可以提供她的姓名和行號。

例如,您可能會注意到,如果您嘗試查看Convert類的實現,則不能。

+0

我想查找意外錯誤的文件名和行號是否有可能? – altandogan

+1

是的,你可以上升1幀,並且可能該幀將會是你的課程。所以你可以得到行號和文件名。 –

相關問題