2

「with」コマンドを使用する大規模なソフトウェア プロジェクトに取り組んでいますが、デバッグに問題があります。

例として、次のコードを取り上げます。

with record do
begin
 record_property = 'some value'; 
end;

このコードをデバッグしていて、record_property の値を確認したい場合は、「with」ブロック内で一時停止している場合でも、record.record_property にウォッチを追加する必要があります。「with」ブロックによって作成されたスコープをウォッチ ウィンドウに引き継ぐことを可能にする Delphi 7 の設定またはアドオンはありますか?

ネストされた「with」ブロックの多くのケースがあり、時計を追加する方法を理解するのが難しいため、これは私の人生をずっと楽にしてくれます。

4

1 に答える 1

7

withステートメントで使用されるレコード ポインターは、 (ほとんどの場合)レジスターにロードさeaxれます。

ブレークポイントがrecord_property = 'some value'行にヒットすると、次の方法でレコード インスタンスを取得できます。

  • アセンブリ ウィンドウを開く ( CtrlAltc)
  • ポインタをロードするために1回ステップするeax
  • 式を評価するTMyRecordType(pointer(eax)^)

または1ステップ少ない(スクリーンショットによる)

  • アセンブリ ウィンドウを開く ( CtrlAltc)
  • 式を評価するTMyRecordType(pointer(integer(ebp)-4)^)

TMyRecordType をレコードの実際のタイプに置き換えます


上記は、興味のある値を取得する最初の簡単な試みです。

それでも問題が解決しない場合は、CPU ウィンドウを開いて、レコード ポインターが読み込まれるレジスタを自分で探す以外に方法はありません。

ここに画像の説明を入力


編集

eaxレコード変数にウォッチを追加するために、揮発性レジスタに依存することはできません。の内容を取得してeax、時計で使用する必要があります。

  • 評価ウィンドウでeax使用してコンテンツを取得するPointer(eax)
  • そのアドレスをウォッチ式で使用します。TMyRecordType(pointer($4A3DB8)^)
于 2013-10-15T10:39:15.447 に答える