jpf*_*ius 12 delphi exception-handling delphi-xe
这是
try
DoSomethingThatMightThrowAnException;
except
on E : ESyntaxError do
begin
if (E.ErrorCode = errMissingBracket) then
HandleError
else
raise;
end;
end;
Run Code Online (Sandbox Code Playgroud)
比这慢?
try
DoSomethingThatMightThrowAnException;
except
on E : EMissingBracketSyntaxError do
begin
HandleError;
end;
end;
Run Code Online (Sandbox Code Playgroud)
有什么不同的预期?有关系吗?请注意,这可能会通过调用堆栈多次发生.
我快速浏览了编译器为上述代码片段生成的汇编程序。事实证明,紧随其后的字节jmp @HandleOnExeption包含数据,例如您在on子句中使用的异常类指针(如果有)。
我不太精通汇编程序,无法确切地知道发生了什么,但足以理解大致发生了什么并得出以下结论:
我怀疑 System.pas 的 HandleOnException 已经执行了call @IsClass,如果找不到合适的处理程序,则会传递异常,因此如果您使用on e:Exception并重新引发,这将添加一些代码并额外进行两次调用:
call @RaiseAgain(如果异常被重新引发)所以,这是有区别的。一个小问题,但它仍然存在。
| 归档时间: |
|
| 查看次数: |
677 次 |
| 最近记录: |