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

在此开个贴,欢迎大家前来讨论,一般什么情况下,我们的程序一般什么情况下不提示错误的直接崩溃。有朋友说像我们这样的软件,因为客户基本上是24小时运行很少关电脑的,所以电脑使用时间长以后需要关机重启,
否则内存会产生大量碎片影响内存分配,不知是否有这样的情况

解决方案 »

  1.   

    找不到原因,可以试着加运行日志,在可能出错的地方,加上调试信息(弹框或dos窗口,或记录文本信息)等,一步步调试
      

  2.   

    找不到原因,可以试着加运行日志,在可能出错的地方,加上调试信息(弹框或dos窗口,或记录文本信息)等,一步步调试
      

  3.   

    内存泄漏会导致崩溃的, 建议你装一个eurakalog 然后崩溃后会产生一个日志文件, 再拿到这里来分析
      

  4.   

    崩溃肯定是内存操作出问题了,我有一次fillchar结构体,其中两个结构体就几个字符不一样,当时敲错了,能正常执行,事后就崩溃。
    如Hexpate所说,使用eurakalog,关键是要找到引起崩溃的源头。
      

  5.   

    一般情况下直接崩溃,那崩溃点都是在外部DLL当中。而发生这种情况的原因可能是以下几个点:
    1. 病毒,没有理由的崩溃,毫无疑问病毒的祸害排在首位。
    2. 共享资源多线程访问冲突,这个么...任何事情都有可能发生,与病毒相比,其后果有过之而无不及。
    3. 接口参数不匹配(定义不清楚,理解不透,还有升级引发),这个么,通常是一条Call指令下去,就找不着北了,也是任何事情都有可能发生的。
    4. OS或相关服务提供者升级补丁引发,这个问题有可能存在3当中所说的接口参数不匹配的问题,而往往更多的是因为某些开发人员的惰性,该做检查的不进行检查,对返回状态不理会等等。
    5. 外部接口程序(钩子)引发。这个么通常比较多是反病毒软件的专利。
    6. 粗心大意,该传值的地方传入了指针,该传指针的地方传值。例如4楼所说的fillchar(data,size,char),其中,如果把data传入了data_ptr,那么破坏的不只是data_ptr这一个变量,如果size足够大,其破坏性远难以估量,而往往data_ptr都在栈内存当中,这一条fillchar指令,直接把整个栈空间都弄乱了,找不着北那也不足为奇。