VC6.0编译的一个软件BUG
具体情况如下:
所用技术和环境说明:
公司的程序是在VC6.0编译器,里面的代码是用C++编写。
主要涉及到的技术有,access/oracle数据库的使用、多线程、串口通信。
程序基本流程说明:
程序分两大部分,一部分是场地设备的数据采集,一部分是监控室对数据的分析判断。场地设备主机先采集数据,然后通过串口把数据传给监控室主机,软件去读取串口的数据,在对数据进行相应的分析判断。
BUG情况说明:
现有程序遇到这样一个问题,当场地设备主机与监控室程序进行通信,如果连接的场地设备数一旦很多,即COM口传递的数据很多时,程序会弹窗报错,点击确定以后,程序退出。报错的提示信息是:该内存不能为read。且该报错无规律,不可重现。倘若场地设备主机没有数据传给监控室,则程序可以正常运行,没有错误。
这个BUG到现在为止,我们没有找出来,不知道是在哪个部分出错了,是程序判断?是串口通信?是多线程?不得而知。更不用说深入到技术细节,是数组越界?野指针?内存溢出?都不得而知。
这份代码是公司一个老员工写的,到现在有五六年了,且这个问题从一开始就存在,一直没有找出这个BUG。这个老员工现在也找不出BUG的原因。我们尝试过给临界资源加锁,但是没有解决。
我们尝试过其它很多种解决办法,该内存不能为read,以这个提示信息找过的方法全试过了,无法解决。我们想过很多曲线迂回的方法,现场调试过多次,但都是只能缓解,无法彻底解决这个问题。
现在我们希望通过CSDN求助,来解决这个问题。
因为公司保密性的原因,无法透露其它更多具体细节,我们真心希望有实力有技术有经验的人来帮忙,公司的源代码因为还是五六年前的,也难免有些冗长繁杂,不一定需要你来帮我们解决问题,只要你找出问题的所在。如果你觉得还有什么其它你想知道的问题,请回帖说明。
请再次从头到尾看一遍整个情况的说明,所用到的技术和BUG的现象说明,如果到这个时候,你还是觉得有把握,想尝试一番,请发私信联系我。
谢谢大家。