我正在嘗試將行號和幀寫入文本文件,但我無法使其工作。根據我在網上閱讀的內容,我寫這篇文章的方式應該可行,但實際上並沒有輸出任何行號,這使得我的調試非常困難。任何人都可以協助指出我的代碼可能是錯的嗎?如何顯示捕捉異常的行號和框架?
catch (Exception e)
{
var st = new StackTrace(e, true);
var frame = st.GetFrame(0);
var line = frame.GetFileLineNumber();
var sw = new System.IO.StreamWriter(filename, true);
sw.WriteLine(
DateTime.Now.ToString() + "\r\n"
+ e.Message + "\r\n"
+ e.InnerException + "\r\n"
+ e.Source + "\r\n"
+ frame + "\r\n"
+ line);
sw.Close();
}
它確實輸出一些信息,而不是行/幀數。
以下是獲取輸出的示例。
22/08/2016 08:34:24
Input string was not in a correct format.
StringToNumber at offset 12099653 in file:line:column <filename unknown>:0:0 0
另外請注意,應用程序運行在Debug not Release中。
它是什麼打印呢?提示:你真的不應該把這樣的代碼直接放在你的catch塊中。相反:定義一些方法/接口爲你做這樣的日誌記錄;並只在你的catch中調用這些方法。或者你打算將這些代碼複製到每個catch塊?最後:你不應該**絕對**確保**沒有其他**異常可以拋出你的catch塊?你想在運行時發生的最後一件事情是你的「生產代碼」中的異常會丟失......因爲後續的異常試圖在你的catch塊中記錄東西? – GhostCat
你能檢查代碼的PDB文件是否加載到內存中?您可以通過在代碼中設置斷點並運行代碼來快速檢查,如果紅色圓圈沒有完全着色,則表示符號(PDB文件)未加載。沒有該文件加載,行號將始終爲0. –
我懷疑你可以得到文件名和行號,如果異常發生在一個.Net程序集(例如mscorlib),除非你以某種方式使用這些程序集的pdb文件 - 如果我沒有錯,你可以從微軟下載它們 –