作者小头像 Lv.7
6457 成长值

个人介绍

SAP成都研究院开发专家,SAP社区导师,SAP中国技术大使。对企业管理软件的设计和开发有深入研究。

感兴趣或擅长的领域

编程语言、云计算
个人勋章
TA还没获得勋章~
成长雷达
6410
15
0
0
32

个人资料

个人介绍

SAP成都研究院开发专家,SAP社区导师,SAP中国技术大使。对企业管理软件的设计和开发有深入研究。

感兴趣或擅长的领域

编程语言、云计算

达成规则

他的回复:
我是做企业管理软件的程序员,有一次我遇到一个问题,一段后台作业代码,运行时偶尔会出现运行时异常(runtime exception),但这个异常不是 100% 能重现,运行十次,大概能重现2,3次。而且在系统负载很重的时候,反而一次也不能重现。更折磨人的是,如果在交互式单步调试模式下,这段代码运行完美,一点问题也没有。既然不能通过单步调试来排错,我的同事们都觉得棘手,最后让我来和这个问题死磕。 后来我采用类似二分查找的方式,把可能引起这个问题的代码层层过滤,最后定位到几行有高度嫌疑的代码,我自己编写了一个测试程序来模拟后台作业执行出错时的运行环境,才找到罪魁祸首:我们的一个模型创建 API,不支持模型创建和模型删除,在一秒钟之内完成。 也就是说,用户在 UI 界面正常操作时,手速再快,也不可能完成在一秒钟之内,做到先创建模型,然后马上删除的操作。但是后台作业是用代码调用 API,在系统负载不高的情况下,一秒钟之内完成创建并且删除的操作,不是一件困难的事情。这个时序问题也解释了为什么这个问题在单步调试模式下无法重现。这个有趣的问题解决完之后,我在公司内部给同事们做了分享。同时我也把问题的细节,和解决方案,发表在了华为云社区上,感兴趣的朋友可以看我这篇华为云社区博客。我把这种通过二分查找法,缩小调查范围,最后找到引起故障的方法论,同电脑硬件DIY 发烧友经常用的最小系统法做了类比:虽然当时花了我不少时间来找问题的原因,但修复故障后,还是很有成就感的,或许这就是当程序员的乐趣吧!