怎样控制退出时的Exception(200分)

  • 主题发起人 主题发起人 opq
  • 开始时间 开始时间
O

opq

Unregistered / Unconfirmed
GUEST, unregistred user!
显然是我们写的DLL或用的Component有问题,又或是我们的DLL Loader
有问题,但我实在找不出错误了,:..< 很难再现,也只有在主程序退出
时才发生Exception,那多难看... 不想被客户在背后说三道四,
强行在Halt之前clear 所有能clear 的东西, 来个ExitProcess()...

但那实在不是好办法,资源被吃掉了......

Exception 只在Halt()时发生,但显然
try
Halt(0);
except
ExitProcess(0);
end;

没用!!!

怎么办??????

请帮忙!!!!!!!
 
;试试程序在释放对象时,马上将其付值 nil;避免程序二次释放对象,释放对象时
尽量使用 Free,不要Destroy.
<a href="http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=153971">用这中方法调试你得Component(你们知己边得).最后在所有Form得OnClose
设置短电,一直最终到程序结束,看是那里粗问题。我以前也遇到过类试问题。 {B-)
 
对有Parent的对象,千万不能手工释放,不然导致二次释放,必死无疑
 
To LeeChange:
No,如果你释放后马上将其付值 nil,你还可以用Free释放,因为Free释放时要
检测对象是否为nil,如果是,就返回。所以尽量使用 Free,不要Destroy,并
程序在释放对象时,马上将其付值 nil! {B-)
 
Thank you for your concern.
But you misread my question.

I know that basic things since i've been a delphian for 5 years.
;>
 
;失敬,失敬,原来是高手! {B-)
到 www.experts-exchange.com 上去问吧?
 
极有可能是控件释放顺序上的问题.
1. 检查是否有控件destroy过程中忘了inherited;
2. 检查是否你的控件中包含owner和parent不是自己的其他控件, 如果有,
那么需要override Notification 判断是否该控件在程序结束时比你的控件先
释放而你的控件的destroy中又释放了一次.

好象只有这两种可能会在程序结束时出现错误.
 
Hi,

There are many reasons cause the exception:

* Using AddExitProc() in DLL
* Wrong finalization in DLL
* Using huge string without ShareMem.pas
* Bad component behavior
* Bad coding(exp memory op) in DLL

The awkard thing is I do not have the source
code of some DLLs that MAY cause problem.
And, the problem may not recur most of time.

I must control the exception from happening
in my main program exit.

Maybe there are two solutions:
1. Rewrite system.pas _Halt0
2. Control win32 exception using API

The first one is stupid.
I did not try the second one.

Can anyone help me this:
* Know how to control Exception using API
* Know how to find globle things(handle,mem)of one (current)
process
* I can only trace the exception point, not the causing point,
any assistant tools (BoundsChecker/Sleuth may help ?) ?


TIA
 
哎,难呀!
我也有一个这样的问题困扰了我一年多了,一直没有解决。
opq: 不知你的具体现象是怎样的,或许我们可以共同探讨一下。
我的程序是如果打开了数据库,而且客户端是Oracle 7.3,退出时必然出错,
在使用Oracle8的客户端却不出错,所以怀疑错误可能是在Oracle或BDE/SQL_link等,但
怎么也查不出来,而且最让人气愤的是竟然连掩盖掉错误信息的办法都没有。

顺便问一下opq,你是洋人吗?
 
多人接受答案了。
 
后退
顶部