2014-01-08 66 views
0

我有一個C#窗口應用程序(開發於插件架構),我想從我的應用程序記錄所有未處理的異常。 我能夠抓住所有的例外。從異常中獲取文件名和行號

我想讀取文件名和從例外的行號。 (在NET 2.0

我用

if (exception.InnerException != null) 
{ 
    exception = exception.InnerException; 
} 

StackTrace trace = new StackTrace(exception, true); 
string fileName = trace.GetFrame(0).GetFileName(); 
int lineNo = trace.GetFrame(0).GetFileLineNumber(); 

其工作正常,在我的應用程序的例外,如果在參考DLL任何例外,我沒有得到的文件名和行號

+0

我在想什麼涉及到記錄每一幀,或迭代通過幀,直到你找到一個來自你的代碼 –

回答

4

此信息僅在有問題的DLL的「.pdb」文件可用時纔可用。

因此,您應該確保相應的「.pdb」文件與其對應的DLL一起。

您還需要啓用PDB文件中的完整數據。調試版本默認執行此操作,但發佈版本不包含行號信息。

您可以通過轉到項目的Build頁面來配置發佈版本,確保您選擇了「發佈」配置,然後單擊頁面底部的「高級」按鈕。在「高級構建設置」對話框中,您需要爲「調試信息」設置選擇「全部」。

+0

我認爲OP想要的應用程序內的任何內部最呼叫的文件/行號,NOT DLL中的文件/行號 –

+0

@DrewMcGowen嗯,我想這是因爲他沒有帶有完整調試信息的「PDB」文件,他稱之爲「參考文件」。 –

+0

重新編譯.pdb文件,現在我得到了行號和文件名。 – Sumeshk

0

第一幀並不總是正確的答案。就我而言,這是最後一個。一般來說,我認爲這是第一個有檔案的人。

相關問題