这几天看完了调试九法,是本好书,只是道理该懂的人自然会懂,不懂的看了书也不会懂。
于是想起了几年前工作中遇到的一些问题,算是属于广义的调试吧。
有一次项目组收到技术支持人员的报告称,客户(一所学校)的机房安装过我们的软件E后,他们原来上课使用的教学软件K,就不能使用了。随后,我就收到了去现场解决软件冲突的任务。
到了学校的机房,我们先把所有计算机都启动,软件E和K都是开机就自动运行的,但是发现我们的软件E都正常启动了,而软件K却只有几台正常启动了,其他的都没有在运行。
接下来,我把一台软件K没有正常启动的计算机上的软件E卸载掉后,重新启动,发现软件K还是没有成功运行。
我们又卸载掉几台计算机上的软件E后,把所有计算机重新启动,发现还是装了软件E的计算机上软件E都正常运行了。但是,软件K还是只在几台计算机上启动成功,这些计算机有的装有软件E,有的并没有安装软件E。由此,我们判断,软件K是否能够运行,和安装软件E没有关系,也就是说软件E和K本身并不冲突。
但是,客户的机房确实是在安装完我们的软件E后才出现问题的,而且这期间没有安装过其他软件,计算机上也有还原保护系统在工作。
我再一次把所有计算机重新启动了一次,还是只有几台计算机上软件K在正常运行,而且每次重新启动后能正常运行软件K的计算机也不相同。正当百思不得其解的时候,我突然发现虽然软件K正常启动的计算机和前一次不同,但是它们的座位号却是一样的。我赶紧查看了所有能正常运行的软件K的座位号,发现它们的座位号都是不同的。我找到软件K保存座位号的注册表项,在软件K不能正常启动的计算机上去查看,发现注册表项中的值与已经运行的某个软件K的座位号是相同。到这时就很确定是软件K的座位号设置重复才导致了它不能正常启动的。于是,我们修改了一些重复的座位号后,重新启动计算机,这些计算机上的软件K也能够启动了。
这时,我几乎可以确定是安装我们的软件E的时候,机房管理员使用了系统同传的方式,就是在一台计算机上安装好后,然后把整个系统克隆到其他计算机上,导致软件K的座位号设置重复。机房管理员最终也确认了这一点儿。
最后,我们把所有计算机的软件K的座位号设置正确后收工。
其实以上过程还算不上有条理,所以效率不是很高,加上计算机上有还原卡,每次修改注册表项前都需要打开还原卡,修改后再设置还原卡。整个过程花了几个小时。
确定软件E和软件K本身并不冲突是一个分界点,此后就只在软件K的找原因了。
发现软件K的座位号设置也是比较偶然的,因为我们对软件K并不了解,它是其他公司开发的,之前我们并没有使用或看到过。虽然我们最后发现了座位号的问题,但是如果去询问软件K的技术支持人员可能他们会在第一时间就给出检查座位号设置的建议,因为他们更理解系统。