RTTWaitThread = class(TThread)
......
procedure TWaitThread.MyError;
var i,j:integer;
begin
try
try
i:=100;
j:=0;
i:=i div j;
except on E:Exception do
MainForm.Memo1.Lines.Add('MyError : '+e.Message);//这边始终没有打印出来
end;
finally
MainForm.Memo1.Lines.Add('MyError : finally');//这边是有打印出来的
end;
end;procedure TWaitThread.Execute;
begin
MyError;
end;如上 代码。 为什么???
......
procedure TWaitThread.MyError;
var i,j:integer;
begin
try
try
i:=100;
j:=0;
i:=i div j;
except on E:Exception do
MainForm.Memo1.Lines.Add('MyError : '+e.Message);//这边始终没有打印出来
end;
finally
MainForm.Memo1.Lines.Add('MyError : finally');//这边是有打印出来的
end;
end;procedure TWaitThread.Execute;
begin
MyError;
end;如上 代码。 为什么???
......
FMessage: String;
procedure LogMessage;procedure TWaitThread.MyError;
var i,j:integer;
begin
try
try
i:=100;
j:=0;
i:=i div j;
except on E:Exception do
//MainForm.Memo1.Lines.Add('MyError : '+e.Message);//这边始终没有打印出来
FMessage := 'MyError : '+e.Message;
Synchronize(LogMessage);
end;
finally
//MainForm.Memo1.Lines.Add('MyError : finally');//这边是有打印出来的
FMessage := 'MyError : finally';
Synchronize(LogMessage); end;
end;procedure TWaitThread.Execute;
begin
MyError;
end;procedure TWaitThread.LogMessage;
begin
MainForm.Memo1.Lines.Add(FMessage );
end;
type
TABThread = class(TThread)
private
{ Private declarations }
protected
FMessage: String;
procedure LogMessage;
procedure Execute; override;
procedure MyError;
end;procedure TABThread.LogMessage;
begin
MainForm.Memo1.Lines.Add(FMessage );
end;procedure TABThread.MyError;
var i,j:integer;
begin
try
try
i:=100;
j:=0;
i:=i div j;
except on E:Exception do
begin
FMessage:='MyError : '+e.Message;
Synchronize(LogMessage); //还是 打不出来啊
end;
end;
finally
//MainForm.Memo1.Lines.Add('MyError : finally');
FMessage := 'MyError : finally';
Synchronize(LogMessage);
end;
end;D6 不行啊...
finally无论有没异常都会走到的
var i,j:integer;
begin
try
try
{$O+}
i:=100;
j:=0;
i:=i div j;
{$O-}
except on E:Exception do
begin
FMessage:='MyError : '+e.Message;
Synchronize(LogMessage); //还是 打不出来啊
end;
end;
finally
//MainForm.Memo1.Lines.Add('MyError : finally');
FMessage := 'MyError : finally';
Synchronize(LogMessage);
end;
end;
后加showmessage(inttostr(I));程序必会执行。
1、在调试时被优化掉的代码是不能设置断点的(设置断点时IDE显示颜色会不一样),因为根本执行不到
2、人工分析代码
但是实际上好像有些有用的代码也会被优化,可能IDE有点问题,你如果觉得你写的代码都有用的话,可以不用优化,project->options->compiler->optimization去掉钩就行了
然后只进行如下操作
i:=10;
i:=20;
则后面一句有效,前面那一句就被忽略掉而不执行了.