デバッグのための属性DW_AT_locationの使用法を知りたいと思いました。これは、dwarfがデバッグ用に指定した属性の1つですが、それが何を表しているのかを実際には理解できませんでした。また、コードをコンパイルするときにこの属性をいつ発行する必要がありますか。
2 に答える
DWARF 3 仕様の第 7 章、DATA REPRESENTATION を確認してください。
たとえば、DW_AT_location の値が 0x91 0x68 の場合、第 7 章の表から、0x91 が DW_OP_fbreg である DWARF デバッグ情報フォーマットを示し、0x68 が SLEB128 オフセットであることを知ることができ、その実際の値を取得できます。 24.
DWARF 3 仕様 (http://dwarfstd.org/doc/Dwarf3.pdf) から:
2.16 データの場所 変数、パラメータ、共通ブロックなどを含むデータ オブジェクトを記述するデバッグ情報エントリは、DW_AT_location 属性を持つことができ、その値は場所の説明です (セクション 2.6 を参照)。
DW_AT_location 属性の値は場所の式です。位置式はかなり複雑です。詳細については、上記で参照した DWARF 仕様を読むことをお勧めします。要約すると、場所の式は、変数の場所を含む単純なアドレスにすることも、変数の場所を特定するために実行時にデバッガーによって評価する必要があるミニプログラムにすることもできます。DWARF 仕様からの位置式の例を次に示します。
理想的には、コンパイラは、プログラム内のすべてのポイントで変数の位置を説明する変数の位置リストを出力する必要があります。レジスタを介して変数の位置を追跡することは簡単ではありません。そのため、一部のコンパイラは、デバッグ情報を生成するときに、変数をレジスタに移動するなどの最適化を無効にします。