最近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分法,把代码体分成一段一段的,然后在去找问题。
- 单元测试,是解决问题的最佳办法。