delphi – 重新启动异常的费用是多少?
发布时间:2020-12-15 03:34:03 所属栏目:大数据 来源:网络整理
导读:这是 try DoSomethingThatMightThrowAnException;except on E : ESyntaxError do begin if (E.ErrorCode = errMissingBracket) then HandleError else raise; end;end; 比这慢吗? try DoSomethingThatMightThrowAnException;except on E : EMissingBracketS
这是
try DoSomethingThatMightThrowAnException; except on E : ESyntaxError do begin if (E.ErrorCode = errMissingBracket) then HandleError else raise; end; end; 比这慢吗? try DoSomethingThatMightThrowAnException; except on E : EMissingBracketSyntaxError do begin HandleError; end; end; 有什么区别?有关系吗?请注意,这可能会通过调用堆栈发生多次. 解决方法
我已经快速看看编译器为上面的代码片段发出的汇编程序.原来,jmp @HandleOnExeption之后的字节包含数据,例如在on子句(如果有的话)中使用的异常类指针.
我不是很精通汇编人员准确地知道发生了什么,而是足够了解大致的事情,并得出这样的结论: 我怀疑System.pas’HandleOnException已经调用了@IsClass,并且如果没有找到合适的处理程序,那么传递异常,所以如果你在e:Exception和re-raise上使用,这将添加一些代码,并进行两次调用: >一个回到你的异常处理部分(在所有情况下) 所以有一个区别.一个小的,但仍然在那里. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |