在浏览 System.Zip(Delphi XE2)以了解其工作原理时,我发现了这个函数:
procedure VerifyWrite(Stream: TStream; var Buffer; Count: Integer);
begin
if Stream.Write(Buffer, Count) <> Count then
raise EZipException.CreateRes(@SZipErrorWrite) at ReturnAddress;
end;
我有点困惑的是at ReturnAddress
这部分。
我不知道at
是一个有效的关键字(语法高亮似乎也没有识别它)。
根据IDE,它被声明为System.ReturnAddress
,但我只能在procedure _HandleAnyException;
的(asm)代码中找到它被声明为标签。尽管系统单元充满了对它的引用。
所以我想知道的是:
ReturnAddress
是什么?Raise Exception.Create ... at ReturnAddress
具体是做什么的?
如果您能给出一个现实世界的例子,在那里使用这个结构将会非常有用,或者如果您可以建议不要使用它,那么就能获得额外的奖励分数。
TList.Error
的函数,其中包含所有与TList
相关的错误。知道异常是在该函数中引发的对调试没有帮助,因此它使用at
语法将异常地址放回调用Error
函数的函数中,这样当您在映射文件中查找地址时,就可以更好地了解罪犯是谁。(而且为什么要使用助手函数?首先,它使调用方的代码生成更简单。) - Rob Kennedyat
语法自1995年以来就存在了。当时,MadExcept还没有出现,无法为您提供来自客户的漂亮崩溃报告。 - Rob Kennedy