俘获异常问题,送分!!!(50分)

  • 主题发起人 主题发起人 ddc
  • 开始时间 开始时间
D

ddc

Unregistered / Unconfirmed
GUEST, unregistred user!
不知为什么,我用D5俘获异常总不成功,
例如:
TRY
J:=10 DIV 0
EXCEPT
ON EDIVBYZERO DO
SHOWMESSAGE(‘KKKK’);
END
他都没显示不了‘KKK’,为什么,请问如何设置?
 
先編譯完後,找到對應的exe文件,就會有kkk出現
 
编译时异常由系统来处理,直接运行exe就由你来做了
 
Ctrl + Shift + F11
Compiler
Code generation
Optimization 是选中的,所以异常被优化了。
不选该选项即可。
 
在运行期而不是设计期达到你想要的效果
 
自定义异常需要运行*.exe程序时才能出现。
不过当出现系统的异常后,你接着按F7, 系统就会又出现你定义的异常处理
情况。
 
试试 .exe 吧,我碰到过,会出现的!
 
可以设置断点来看你的异常机制是否有效!
 
来晚了,Croco是对的.我试了一下,exe也不会出现的.
可以在unit的开始处加上{$O-}编译开关禁止优化
 
你们都是对的。
 
这个问题我也遇到过,而且是随机出。
上面的方法我都试过了,都不管用,
EDivByZero是CPU的硬件异常,windows 系统会捕获。
你可以改用浮点0 除 EZeroDivide
 
Croco方法应该对啊。你没效果?!

>>EDivByZero是CPU的硬件异常
不是吧。
 
我也有这样的问题,请指教!
 
你的代码有问题,编译不会通过,delphi不允许数字直接除0,但是可以这样写

I:=0;
J:=10 DIV I;
在运行出现错误时按F9继续执行就可以看到KKK了!

 
怎么也出不来kkk是kkkk吧,不对是KKKK
 
用Application.OnException()捕获异常!
 
其实问题很简单,你的变量 J 只赋过一次值,
而没有使用过,所以delphi的编译器把他优化掉了。
也就是说,这条语句在程序中根本不存在,
自然不会触发异常了!!!
 
应该是only you的正确吧,div 0 可能不能通过编译吧。
 
我也同意only you 的意见。
 

Similar threads

S
回复
0
查看
835
SUNSTONE的Delphi笔记
S
S
回复
0
查看
765
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部