、私はこの機能を見つけました:Delphiでは `at ReturnAddress`とはどういう意味ですか?それがどのように動作するか確認するためにSystem.Zip(デルファイ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
と宣言されていますが、(asm)コードprocedure _HandleAnyException;
のどこかでラベルとして宣言されています。システム・ユニットには参照がいっぱいです。
それでは、私が知りたいのはこれです:ReturnAddress
ある
- 何?
- 正確に
Raise Exception.Create ... at ReturnAddress
とは何ですか?
実用的な例であればどこに役立つのか、それが役に立つかどうかをアドバイスできれば、ボーナスポイントが得られます。
@ain:フォーマット支援に感謝します。引用したテキストの最後の文章を強調したいだけで、編集した事実を削除することを意味しませんでした。 :) –
そして、実際には、例外を発生させるために*ヘルパ関数*を使用すると、このコンストラクトの実際の使用が一般的です。たとえば、VCLでは、 'TList.Error'があります。ここでは、' TList'関連のエラーがすべて発生します。その関数で例外が発生したことがデバッグには役に立たないことを知っているので、 'at'構文を使用して例外アドレスを' Error'という関数に戻します。そのため、マップファイルのアドレスを調べるとき、犯人が誰であったか、あなたは良い考えを持っています。 (なぜヘルパーを使用するのですか?1つは、呼び出し元のコードジェネをよりシンプルに保ちます) –
@RobKennedy:コールスタックが同じ情報を表示しないでしょうか? – afrazier