最近ccflow程序在运行的时候经常导致iis死机,单步调试无法找到问题。

但是退出重新启动vs程序,又可以了。第一次运行没有问题,为此问题,不知道从何地方下手。

为此我想到了写一个单元测试来测试是否可以,在ccflow上面创建一个单元测试代码。如下

调试ccbpm系统的bug个技巧 如何调试asp.net程序导致iis死机问题_第1张图片

把default.aspx设置为起始页,执行第1次成功,第2次就失败。

由此我想到,一定是底层的代码出现错误,而非前端的js导致iis死机的问题。

我把范围在缩小一次,执行default.aspx ,发现代码出现在第一个发送方法上面。

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

进一步缩小范围,就是我们的核心代码 NodeSend() ;的方法,出现问题。因为NodeSend这个方法比较大,所以我在中间写一个了个异常。

经过测试发现,这个大方法的上部分,没有问题。

我把剩余代一半代码,在缩小范围一半,在中间部分,增加上

throw new Exception("err@运行到这里了,刷下一下页面,检查是否出问题,如果出问题就说明,以上代码有问题。");

这个异常,最后定位到,处理事件的这个方法出问题了。

调试ccbpm系统的bug个技巧 如何调试asp.net程序导致iis死机问题_第2张图片

用同样的方法,把在方法体中间,加抛出异常,反复几次,终于定位到了,发送邮件的时候导致的问题。

调试ccbpm系统的bug个技巧 如何调试asp.net程序导致iis死机问题_第3张图片

为了不耽误使用,我暂时注销了他。

总结:

  1. 遇到类似的问题,需要写一个单元测试,需要找到重现的场景。
  2. 找到重现的场景,就需要采用2分法,把代码体分成一段一段的,然后在去找问题。
  3. 单元测试,是解决问题的最佳办法。