我想了解调试中属性DW_AT_location的用途。它是dwarf指定的调试属性之一,但我并不真正理解它究竟代表什么。还有,在编译代码时应该在何时发出此属性。
根据DWARF 3规范(http://dwarfstd.org/doc/Dwarf3.pdf):
2.16 数据位置 任何描述数据对象的调试信息条目,包括变量、参数、共享块等,都可能有一个DW_AT_location属性,其值是一个位置描述(参见第2.6节)。
DW_AT_location属性的值是一个位置表达式。位置表达式相当复杂,建议您阅读上述引用的DWARF规范以了解更多信息。简而言之,位置表达式可以是具有变量位置的简单地址,也可以是必须由调试器在运行时评估的小程序,以确定变量的位置。以下是一些来自DWARF规范的示例位置表达式:
理想情况下,编译器应该为变量发出位置列表,描述其在程序中所有点的位置。通过寄存器跟踪变量的位置并不容易,这就是为什么一些编译器在生成调试信息时禁用像将变量移入寄存器这样的优化的原因。