2012-03-15 38 views
0

我想知道使用属性DW_AT_location进行调试。它是矮人用于调试的属性之一,但不能真正理解它代表的是什么。而且当我们编译代码时应该何时发出这个属性。DW_AT_location的使用和含义

回答

0

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

2.16数据位置的任何调试信息条目描述的数据对象,其包括变量,参数,共同块和 类似,可能具有DW_AT_location属性,其值是位置 说明(请参阅第2.6节)。

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

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

1

请检查DWARF 3 spec,DATA REPRESENTATION的第7章。例如,如果DW_AT_location的值是0x91 0x68,从第7章的表中我们可以知道0x91表示DWARF调试信息格式是DW_OP_fbreg,而0x68是SLEB128偏移量,我们可以得到它的实际价值:-24。

+0

这个sleb128偏移究竟是什么?为什么这么复杂而不是简单的-24? – stackoverflowwww 2017-01-03 19:02:08