2012-06-07 67 views
1

在我負責的代碼中,我有幾個'拋出新的Exception()'方法。獲取行號碼

問題是,catch並不總是處於最佳位置,甚至不在同一班。這意味着當我發現一個錯誤時,我不知道起始位置在哪裏,或者即使如此,每個類中可能會有數百/數千行代碼。

因此,在throw消息中,爲了進行調試,可能需要聲明類名稱,項目名稱,方法名稱和行號以便於導航。行號很棘手。我無法對它進行硬編碼,因爲只要我修改代碼就不太可能保持在同一行。

所以,我的2個問題是
1)我們喜歡這個想法還是認爲不,有更好的方法!
2)任何想法如何獲得行號?

+4

此信息通常在堆棧跟蹤中可用。 –

+0

在單一課堂中擁有數千行不是一個好主意。 – unholysampler

+0

要跳轉到visual studio中的確切行,請使用鍵盤快捷鍵ctrl + g –

回答

0

如果包括調試符號(.pdb)文件,在同一目錄中.dll.exe,它會自動加載它們,並提供在exception.StackTrace的行號。

要構建的符號,在你的發佈構建設置,下高級構建設置,轉調試信息全部

Advanced Build Settings

0

你使用Visual Studio?您可以在調試時使用「調用堆棧」工具欄,它會顯示代碼中的執行順序。您可以選擇方法並將您帶到執行線

0

此信息通常可以在堆棧跟蹤 - 由Jeremy(見我的意見)。

對不起,如何標記評論爲正確答案!

+0

不能,除非他讓它成爲答案 –

0

行號不會顯示在以發行模式編譯的代碼中。如果這是一個內部應用程序,您和您確實想要行號,您可以始終部署以調試模式編譯的代碼,然後使用程序集部署PDB。但是這也涉及性能成本,所以這並不總是最好的方法。儘管如此,我不確定是否有更好的方法。

如果我沒有記錯的話,Roslyn項目給了我們一個更好的方式來獲取行數,但不夠熟悉它以提供更多細節。

0

您可以使用C#5捕獲調用者的行號。0功能結合默認參數。因此,不要直接構造和拋出異常,而要構建一個構造異常的方法。

異常CreateMyException( [CallerFilePath]字符串文件路徑= 「」, [CallerMemberName]串成員名稱= 「」, [CallerLineNumber] INT LINENUMBER = 0) { 返回新的異常(的String.Format(「拋出異常來自文件{2}中成員{1}中的行{0}「, lineNumber,memberName,filePath)); }

...在你的代碼的其他地方..

擲CreateMyException(); //編譯器爲默認參數注入當前值。