我有一个工程,编译没有问题,然运行的时候可能会
报错(是当我退出运行程序是说有个异常)。
还有就是虽然我一个字不改动,重新编译一遍可能又不会报错。
如果我编译的时候是用f8,f8...一路这样走过来,程序最后不会报错
(而如果我只是Ctrl+f9或者直接f9, 则很可能最后编译的exe运行要报错)。如果编译完成后的exe,第一次运行,退出,没有问题的话,以后也不会有问题,
随便换到其他机器执行也没有问题。
但是如果第一次运行,点退出的时候有异常的话,以后每次运行都有异常。
换到其它机器执行也会一样。。如果设置断点跟踪,发现~~~~~~~~是在主工程文件的快执行最后一个end的时候才出现的异常。
就像下面那样
(前略)
begin
    Application.Initialize;
    Application.CreateForm(TForm1, Form1);
    Application.Run;
end; //单步执行了这句后才会出异常
end.
我~~~~~~~~~~~~~头~~~~~~~~~~~~~~大啊请帮我分析一下怎么找bug?

解决方案 »

  1.   

    在finalization段中有异常,可能是你引用的vcl控件中该段有错误。
      

  2.   

    Application.Run 中的错误可能跟其它引用的窗体或单元有关系. 是不是有地方引用了没有分配内存的变量或没有实例化的类
      

  3.   

    选择project->option中的codeguard,他会帮助找到程序隐含的错误。
    你是不是释放内存时出现什么问题了
      

  4.   

    这种错误要么跟内存使用有冲突,要么使用的控件有BUG,所以不必探究
    以后哪天会豁然开然的
      

  5.   

    对了异常是这么说的
    ---------------------------
    Debugger Exception Notification
    ---------------------------
    Project myapp.exe raised exception class EInvalidPointer with message 'Invalid pointer operation'. Process stopped. Use Step or Run to continue.
    ---------------------------
    OK   Help   
    ---------------------------
    如果控件有bug,那么就要把bug找出来。(基本上我只有用到一个叫做gifImage.pas的自由代码,
    没有其他非官方控件)
    to rikky(读书、心知、生活) ????????
    我用的delphi6, 找不到你说的选项
      

  6.   

    跟踪的新情况是
    当formDestroy时=>....=>GifImage.pas里面的最后那句end.
        DummyThread.Free; 
      end;
    end.//在这里之后出现的问题gifImage.pas本身是Anders Melander,99年写的一个源码单元。嗯,在我的程序里面有只有2个地方会涉及到这个单元。
    1个是主form有个函数。里面设计gifImage的只有
               GIFimage := TGIFimage.Create ;
               Try
                 GIFimage.loadfromfile(myfile);
                 Image.Picture.Bitmap.Assign(GIFimage);
               finally
                 freeandnil(GIFimage);
               end;
    2是写有一个component.里面的uses 单元有gifImage;///////////请继续帮我分析。。
      

  7.   

    你加个异常处理看行不行
    begin
        Try
            Application.Initialize;
            Application.CreateForm(TForm1, Form1);
            Application.Run; 
        except
         showmessage('异常');
        end;
    end;
      

  8.   

    这个错误是在程序最后退出时候的错误,在主程序退出的时候,要清除一切该程序占用的资源,错误的原因在于你在程序中用了Tobject.create(nil);而在下边没有free掉,或者是在你的程序中的主窗体的onclose或者ondestory事件中的一些操作,都是在你的那个错误的end;时候才执行的,也可能是你的程序异常,还有,如果是多线程程序的话,非常可能的就是资源共享冲突之类的问题了,总之,没有你的源程序,我只可以说这么多,跟踪不一定完全有用,特别是对于资源上的问题(free及create)之类的.
      

  9.   

    根据我的经验,问题就在form1里面,也许你在主程序退出之前,已经释放了form1!
      

  10.   

    请小小 详解 "控件之间的互相抵触。我认为,不然不应该影响到下一次的运行。。
    "这句话的含义...嗯,程序中间有一些form1的成员函数,函数里面使用了application.terminate;
    然跟踪的时候发现,不管是f7,还是f8,有时候似乎都不能让application.terminate执行;
    游标跑下面一句去了!
    对于.Create和free的问题
    我检查过所有的Create.都是采用的try... finally free形式,所以不知道下面该查什么。最郁闷的是报错时有时无。跟运行环境无关,编译后随机可能出现正确也可能出现错误的代码
    我就搞不懂了。
    (比如,我随便在那里加个空格,在减个空格,实际上源码是一样的,
    怎么会编译都产生不同的结果呢?)
      

  11.   

    “根据我的经验,问题就在form1里面,也许你在主程序退出之前,已经释放了form1!”
    --------〉
    主form不是我手动create的,也没有它的释放函数。
    不知道有什么东西是会触发 form的释放事件
      

  12.   

    ondestory我现在手头没有代码
    这里好像是写过一些释放动作
    不过都是
    if assigned (x)= true then
    begin
      freeAndNil(x);
    end;
    的形式的,应该不会错呀
      

  13.   

    自己找到了让问题不出来的办法,少用一个delphi标准单元sharemem万事大吉,原因不明。
    管不了那么多了。结贴