我是一名學生,當我們談論編程時,很多東西都是新的,目前我正在處理DLL文件和自定義異常,用於學習目的。C#.NET - 異常不會在預期的地方顯示
(第一個錯誤)
所以在測試時我故意使用錯誤的代碼創建的例外。當我在測試網站中得到異常時,我可以看到dll的源代碼,而不是在page.cs中顯示它,代碼被調用。
(二錯誤)
在這裏,我特意創建了一個溢出錯誤,然後將其顯示在網頁上的錯誤(異常),而不是微軟的源代碼。爲什麼我的dll文件和Microsoft dll有區別?
我是一名學生,當我們談論編程時,很多東西都是新的,目前我正在處理DLL文件和自定義異常,用於學習目的。C#.NET - 異常不會在預期的地方顯示
(第一個錯誤)
所以在測試時我故意使用錯誤的代碼創建的例外。當我在測試網站中得到異常時,我可以看到dll的源代碼,而不是在page.cs中顯示它,代碼被調用。
(二錯誤)
在這裏,我特意創建了一個溢出錯誤,然後將其顯示在網頁上的錯誤(異常),而不是微軟的源代碼。爲什麼我的dll文件和Microsoft dll有區別?
推測,您的DLL所在的目錄也有一個類似的文件,擴展名爲.PDB
。該文件包含一個數據庫,該數據庫將編譯後的代碼與用於創建該代碼的實際源代碼鏈接起來。視覺工作室只是有點使它在幕後工作。
使用微軟的代碼,你只有那些.DLL文件,而不是.PDB調試符號,更不用說用於創建.DLL的實際源代碼了。由於這個原因,調試器只能從運行時向你提供堆棧跟蹤和異常,而不是導致異常的實際代碼。
注:微軟確實使可的框架代碼,它可以是configured here那些調試符號。另外,請查看Microsoft Reference Source Code Center。
.Net只能顯示行號&用調試符號構建的DLL中函數的源代碼。
這兩個DLL都是用符號構建的,所以它顯示了源代碼。
您沒有mscorlib.dll的符號,因此ASP.Net顯示您具有符號的最接近的函數。
順便提一句,您可以下載.Net框架here的源代碼。
這還不是很實用。
如果您想在主頁上看到您的錯誤,請在處理它們之後拋出異常。
您的主網頁需要一個try/catch
塊:
try {
// dll routine
} catch (Exception err) {
Console.WriteLine(err.Message);
}
而且你的DLL的代碼的try/catch
例程將是這樣的:
try {
// code
} catch (Exception err) {
LogError(err); // if you wrote an error logging routine
// throw err; (basic)
// or, better
throw new Exception("My DLL had an error in Method A.", err);
}
這將差錯回你的主頁,告訴你發生錯誤的地方。另外,如果你想用這種方法做一些事情,它會給你最初的錯誤異常作爲一個InnerException。
我認爲問題是爲什麼源代碼對於自己的DLL而不是微軟的可見。這與異常處理無關。 –
我可能會變老,但這些圖片很難看。 –
現在應該好多了 – Rick