DW_AT_location的用途和含义是什么?

3

我想了解调试中属性DW_AT_location的用途。它是dwarf指定的调试属性之一,但我并不真正理解它究竟代表什么。还有,在编译代码时应该在何时发出此属性。

2个回答

2
请查看DWARF 3规范的第7章“数据表示”。
例如,如果DW_AT_location的值为0x91 0x68,在第7章的表格中,我们可以知道0x91表示DWARF调试信息格式,即DW_OP_fbreg,0x68是一个SLEB128偏移量,我们可以得到它的实际值:-24。

这个 sleb128 偏移量是什么?为什么这么复杂,而不是简单的 -24? - langlauf.io
@langlauf.io的LEB/SLEB格式允许值的字节长度可变。 - Sergey Kuznetsov

2

根据DWARF 3规范(http://dwarfstd.org/doc/Dwarf3.pdf):

2.16 数据位置 任何描述数据对象的调试信息条目,包括变量、参数、共享块等,都可能有一个DW_AT_location属性,其值是一个位置描述(参见第2.6节)。

DW_AT_location属性的值是一个位置表达式。位置表达式相当复杂,建议您阅读上述引用的DWARF规范以了解更多信息。简而言之,位置表达式可以是具有变量位置的简单地址,也可以是必须由调试器在运行时评估的小程序,以确定变量的位置。以下是一些来自DWARF规范的示例位置表达式:

理想情况下,编译器应该为变量发出位置列表,描述其在程序中所有点的位置。通过寄存器跟踪变量的位置并不容易,这就是为什么一些编译器在生成调试信息时禁用像将变量移入寄存器这样的优化的原因。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接