Debug 工具 - 如果系統在開發環境正常但正式環境有問題的話...
先來介紹一下我工作的地方的一些環境吧!
我們這邊用 Team Foundation Server 來作版本控管,另每天在指定時間透過 ClickOnce 的方式將寫好的程式發佈出去給各單位使用
而我們有三個環境:
- 本機測試環境:透過本機架設 Server 端及 Client 端來作測試
- 遠端測試環境:有架設一台發佈伺服器及 Server ,當進行 ClickOnce 發佈服務時會更新這邊的資料
- 正式環境:於正常工作日時會在指定時間將 ClickOnce 發佈的資料 Copy 過來發佈到各正式環境的 Server 並更新各單位的 Client 端的資料
這次遇到的問題就是兩個測試環境上執行某指定功能時都正常,但在正式環境點擊指定按鈕時整個畫面就會被 Hang 住...
因為在測試環境上都是正常的,所以增加了我抓取問題的難度,去 Google 後找到了兩個工具
全都下載安裝後就來使用了,首先先用 Debug Diagnostic Tool 來取得除錯用的資料
安裝完後在開始工具列的選單,那我就先執行 DebugDiag 2.0 Collection 了
執行後會詢問建立規則
那因為我是畫面整個 hang 不動,所以我就選 Crash 並設定他是哪個執行緒,讓他依規則去監控
建完後規則就像圖示那樣,然後我就在正式環境執行該功能了
另還可以在 hang 時跳到 Process 找到該執行緒上按右鍵,選擇 Create Full Userdump亦可
在設定的目錄下,正常 Crash 時會有產生一個 txt 的 Log 檔及一個 dmp 檔
這時我發現在 txt 檔中就有呼叫堆疊並有顯示 Exception
*********************** * EXCEPTION DETAILS * *********************** DetailID = 1 Count: 1 Type: System.NullReferenceException Message: Stack: System.Windows.Forms.SendKeys.LoadSendMethodFromConfig() System.Windows.Forms.SendKeys.Send(System.String, System.Windows.Forms.Control, Boolean) System.Windows.Forms.SendKeys.Send(System.String) xxxxx.client.ucl.UCLDataGridViewUI.dgv_CellEnter(System.Object, System.Windows.Forms.DataGridViewCellEventArgs)
詳細完整的就不丟了,只放上發生例外的片段
這時就發現他的例外是 System.NullReferenceException,而引發錯誤的是 xxxxx.client.ucl.UCLDataGridViewUI 這物件的 dgv_CellEnter
因為以前正常現在不正常,就透過 TFS 查閱是否有其它人更動該檔案並導致該功能會 crash 掉,找到兇手後問題也就解決了
主要只要看得到呼叫堆疊,其實問題解決九成了,所以我也就沒有實驗 WinDbg 了,等之後有空再實驗該工具!
Reference:
留言
張貼留言