調試ccbpm系統的bug個技巧 如何調試asp.net程序導致iis死機問題

最近ccflow程序在運行的時候經常導致iis死機,單步調試無法找到問題。

但是退出重新啓動vs程序,又可以了。第一次運行沒有問題,爲此問題,不知道從何地方下手。

爲此我想到了寫一個單元測試來測試是否可以,在ccflow上面創建一個單元測試代碼。如下

up-1aa3f24f362ddeeedd6bf7343bbd2b5940d.png

把default.aspx設置爲起始頁,執行第1次成功,第2次就失敗。

由此我想到,一定是底層的代碼出現錯誤,而非前端的js導致iis死機的問題。

我把範圍在縮小一次,執行default.aspx ,發現代碼出現在第一個發送方法上面。

BP.WF.Dev2Interface.Node_SendWork("001", workid, 102, "liping");

進一步縮小範圍,就是我們的核心代碼 NodeSend() ;的方法,出現問題。因爲NodeSend這個方法比較大,所以我在中間寫一個了個異常。

經過測試發現,這個大方法的上部分,沒有問題。

我把剩餘代一半代碼,在縮小範圍一半,在中間部分,增加上

throw new Exception("err@運行到這裏了,刷下一下頁面,檢查是否出問題,如果出問題就說明,以上代碼有問題。");

這個異常,最後定位到,處理事件的這個方法出問題了。

up-3e46b67aa38f5cf3a4fa30ca0ebef316ffc.png

用同樣的方法,把在方法體中間,加拋出異常,反覆幾次,終於定位到了,發送郵件的時候導致的問題。

up-835256158daae9a22d1e38067b45044f10d.png

爲了不耽誤使用,我暫時註銷了他。

總結:

  1. 遇到類似的問題,需要寫一個單元測試,需要找到重現的場景。
  2. 找到重現的場景,就需要採用2分法,把代碼體分成一段一段的,然後在去找問題。
  3. 單元測試,是解決問題的最佳辦法。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章