最近ccflow程序在運行的時候經常導致iis死機,單步調試無法找到問題。
但是退出重新啓動vs程序,又可以了。第一次運行沒有問題,爲此問題,不知道從何地方下手。
爲此我想到了寫一個單元測試來測試是否可以,在ccflow上面創建一個單元測試代碼。如下
把default.aspx設置爲起始頁,執行第1次成功,第2次就失敗。
由此我想到,一定是底層的代碼出現錯誤,而非前端的js導致iis死機的問題。
我把範圍在縮小一次,執行default.aspx ,發現代碼出現在第一個發送方法上面。
BP.WF.Dev2Interface.Node_SendWork("001", workid, 102, "liping");
進一步縮小範圍,就是我們的核心代碼 NodeSend() ;的方法,出現問題。因爲NodeSend這個方法比較大,所以我在中間寫一個了個異常。
經過測試發現,這個大方法的上部分,沒有問題。
我把剩餘代一半代碼,在縮小範圍一半,在中間部分,增加上
throw new Exception("err@運行到這裏了,刷下一下頁面,檢查是否出問題,如果出問題就說明,以上代碼有問題。");
這個異常,最後定位到,處理事件的這個方法出問題了。
用同樣的方法,把在方法體中間,加拋出異常,反覆幾次,終於定位到了,發送郵件的時候導致的問題。
爲了不耽誤使用,我暫時註銷了他。
總結:
- 遇到類似的問題,需要寫一個單元測試,需要找到重現的場景。
- 找到重現的場景,就需要採用2分法,把代碼體分成一段一段的,然後在去找問題。
- 單元測試,是解決問題的最佳辦法。