公司用delphi做了套大型的程序,开发完之后,发现一个非常严重的问题:程序会突然退出。退出的条件各种各样,也不固定,可以说任何操作都有退出的可能性,同样的操作不一定会导致同样的退出。而且退出时非常迅速,几乎就是瞬间从任务列表里,从内存里消失了,就算是用正常的退出操作也要好几秒的。
公司全部开发人员百思不得其解,还请CSDN高手助一臂之力。

解决方案 »

  1.   

    感谢大家的关注
     plainsong(伤心的风) ,没有进行质量管理,但,如果内存操作错误的话,应该会有非法操作的对话框出现才对。我不知是不是还会有其它软件也会有这种bug
    chatop(星点)  yaos() 可以确定不是人为因素
     flp(会说话的哑巴) 退出时没有执行到任务退出操作,所有对象没有被析构,但内存却被释放了,是操作系统搞的。
    delphiyesterday(郑康益) 退出之后没有任何不良反映,软件可以再进入,直到下次莫明退出
      

  2.   

    hairui(海瑞) 说实话,D版
    karl(多功能算术逻辑运算单元)每台机器都出现
    ourme(风含笑) 我真的很想知道这不是开发的问题
    breezing(上帝死了 众神在堕落) 值得一试
      

  3.   

    可能是内存访问冲突或泄露吧,以前好像有过像这样的,突然退出,没什么征兆
    后来改了对Mem操作的地方就好了,不过我也记不太清了。
      

  4.   

    内存泄漏,调用windows非正常内核
    有人做了手脚
    建议测底跟踪一下
      

  5.   

    如果程序没问题,可能是操作系统的问题。
    去查看查看Windows中的Dr.Watson程序的日志。
    如果没有,把Dr.Watson的开关打开。
    Windows为了自保护,会杀掉它认为对系统有害的程序。
    一般会把问题记在Dr.Watson的日志中。
      

  6.   

    你可以用Borland中带的WinSight跟踪调试,另外还有一工具eurekalog,它嵌入到源程序中,可以把运行时出错的地方找出来,并记录形成一log文件,可以一试。
      

  7.   

    你公司的程序在每台机器都是一样的情况吗?
    没有用delphi调试的时候跟踪一下吗?或者设一个断点,应该能跟到问题的所在吧。
      

  8.   

    前天刚刚看了windows的异常处理机制,发现如果程序出现错误,就会不断的退出函数,直到找到第一个try..except为止。如果程序中没有使用任何try..except就一直退到程序开始的地放,在那儿windows给每个程序都加了一个try..except,也就是我们经常看到的错误对话框,点确定后退出。
      

  9.   

    还没说完呢,就是些程序的时候,在可能出错的地方要勤加try..except进行错误捕获。
    这样程序就不会因为一个不太重要的错误而被中止了。
      

  10.   

    楼上的说的很对,很可能是程序出现异常。
    try 。。finally(except)中间出错!
    这样容易导致程序的终止啊!
      

  11.   

    不会是D的问题,
    不过问题是很奇怪!!!
    但看题目好像加try处理也搞不定啊!!!
      

  12.   

    有些控件可能会引起这个问题。(特别看3方的)我在bcb中用f1book。用
    i+=1;
    一运行,
    则整个程序包括开发环境瞬间关闭。换成
    i=i+1;则完全没有问题。
      

  13.   

    大型的程序出错后,如果源代码编译不出错,又检查不出接口和流程的逻辑错误,可以试一试以下的办法:
     如果是系统引发的强制性退出,只能借助系统管理工具去分析。如是程序自身的退出:将每个EXIT前加上SHOWMESSAGE(),将当时的怀疑对象的相关变量甚至系统变量都SHOW出来,往往会发现是变量的值越界引发的问题。
      

  14.   

    建议在每一个事件与过程中加一个try...except
    然后showmessage('过程名'),也许可以找到它!
      

  15.   

    以前在用D5的时候碰到过类似这样的情况。结果发现是TMemo的一个Bug。你可以把无关的模块依次屏蔽,这样大致可以发现是那里出的问题
      

  16.   

    我在BCB上遇到过类似的问题。当我的应用程序的控件达到一定数量或.dfm文件大到一定程度时会发生一些想不通的奇怪问题。
      

  17.   

    这好象是内存指针越界,首先检查有没有资源泄露,在申请资源时用try...except结构,在每一个可疑的的放用showmessage(),看看。反正这种问题很烦的
      

  18.   

    我在BCB上遇到过类似的问题,是由于程序读的XML文件中有回车或一些特殊的全角字符造成的,不知你是不是有类似情况
      

  19.   

    经过这几天的拼命试验,终于发现问题出在哪了!需要在所引用的第一个DLL文件的users关键字下面的第一个位置加一个ShareMem单元,这样问题就解决了。在新建DLL工程后,delphi会在前面加上注解,内容是
    { Important note about DLL memory management: ShareMem must be the
      first unit in your library's USES clause AND your project's (select
      Project-View Source) USES clause if your DLL exports any procedures or
      functions that pass strings as parameters or function results. This
      applies to all strings passed to and from your DLL--even those that
      are nested in records and classes. ShareMem is the interface unit to
      the BORLNDMM.DLL shared memory manager, which must be deployed along
      with your DLL. To avoid using BORLNDMM.DLL, pass string information
      using PChar or ShortString parameters. }
    相信这个大家都有印象。这段话只是说明了需要如何如何做,但并没有说不这样会发生什么后果。没有解释原因,而且,以前的项目即使不使用ShareMem单元,也不会出错。所以,大家全都乎视了这个注释。不管怎么样这都是一个惨痛的教训。我相信绝不是我一家软件公司会遇到这事。在这里,我要非常感谢大家的帮助。另外,我肯请版主把此贴转到精华,以使大家不要再走这个弯路。