读书人

关于程序无错崩溃的有关问题欢迎大家

发布时间: 2013-01-05 15:20:39 作者: rapoo

关于程序无错崩溃的问题,欢迎大家前来讨论
最近手头一个项目,程序突然出现无故自动退出的现象,客户抱怨,很头痛。
程序是工控程序,10个子线程与单片机通讯回收数据处理,数据处理用的BDE,尽可能的排除了程序里的越界溢出等问题。
但是还是找不到问题的根源所在。

在此开个贴,欢迎大家前来讨论,一般什么情况下,我们的程序一般什么情况下不提示错误的直接崩溃。


有朋友说像我们这样的软件,因为客户基本上是24小时运行很少关电脑的,所以电脑使用时间长以后需要关机重启,
否则内存会产生大量碎片影响内存分配,不知是否有这样的情况
[解决办法]
找不到原因,可以试着加运行日志,在可能出错的地方,加上调试信息(弹框或dos窗口,或记录文本信息)等,一步步调试
[解决办法]
一般情况下直接崩溃,那崩溃点都是在外部DLL当中。而发生这种情况的原因可能是以下几个点:
1. 病毒,没有理由的崩溃,毫无疑问病毒的祸害排在首位。
2. 共享资源多线程访问冲突,这个么...任何事情都有可能发生,与病毒相比,其后果有过之而无不及。
3. 接口参数不匹配(定义不清楚,理解不透,还有升级引发),这个么,通常是一条Call指令下去,就找不着北了,也是任何事情都有可能发生的。
4. OS或相关服务提供者升级补丁引发,这个问题有可能存在3当中所说的接口参数不匹配的问题,而往往更多的是因为某些开发人员的惰性,该做检查的不进行检查,对返回状态不理会等等。
5. 外部接口程序(钩子)引发。这个么通常比较多是反病毒软件的专利。
6. 粗心大意,该传值的地方传入了指针,该传指针的地方传值。例如4楼所说的fillchar(data,size,char),其中,如果把data传入了data_ptr,那么破坏的不只是data_ptr这一个变量,如果size足够大,其破坏性远难以估量,而往往data_ptr都在栈内存当中,这一条fillchar指令,直接把整个栈空间都弄乱了,找不着北那也不足为奇。
[解决办法]
检查一下是否有巨深或无限层次的嵌套函数调用。导致栈溢出了。
[解决办法]
程序有错
只是你没发现而已
你的那些线程之间 也许是出现了什么小概率冲突事件

读书人网 >.NET

热点推荐