2012-03-15 13 views
0

デバッグにDW_AT_location属性を使用する方法について知りたいと思います。デバッグのためにdwarfによって指定された属性の1つですが、正確に何が表現されているのかを実際には理解できませんでした。また、コードをコンパイルするときにいつこの属性を生成する必要がありますか。 DWARF 3スペック(http://dwarfstd.org/doc/Dwarf3.pdf)からDW_AT_locationの使用と意味

答えて

0

2.16データの格納場所変数、パラメータ、共通を含むデータオブジェクトを記述する任意のデバッグ情報エントリは、ブロックがあり、 のようなものは、値が位置 (セクション2.6を参照)であるDW_AT_location属性を持つことがあります。

DW_AT_location属性の値はロケーション式です。位置式はかなり複雑ですが、詳細は上記のDWARF仕様をお読みください。要約すると、位置式は、変数の位置を示す単純なアドレス、または変数の位置を決定するためにデバッガによって実行時に評価されなければならないミニプログラムであってもよい。

理想的には、コンパイラは、プログラム内のすべてのポイントでその位置を記述する変数のロケーションリストを生成するのが理想的です。レジスタを介して変数の位置を追跡することは自明ではないので、デバッグ情報を生成する際のコンパイラの中には、変数をレジスタに移動するような最適化を無効にするものがあります。

1

第7章のDWARF 3 spec、データ表現を確認してください。

たとえば、第7章の表のDW_AT_locationの値が0x91 0x68である場合、0x91はDWARFデバッグ情報形式DW_OP_fbregを示し、0x68はSLEB128オフセットであることがわかります。実際の値:-24。

+0

このsleb128オフセットは正確には何ですか?なぜそんなに複雑ではなく、単に-24? – stackoverflowwww