我想知道使用DW_AT_location属性进行调试。它是矮人为调试指定的属性之一,但无法真正理解它究竟代表什么。此外,在编译代码时应该何时发出此属性。
答案 0 :(得分:1)
来自DWARF 3规范(http://dwarfstd.org/doc/Dwarf3.pdf):
2.16数据位置任何描述数据对象的调试信息条目,包括变量,参数,公共块和 比如,可能有一个DW_AT_location属性,其值是一个位置 说明(见第2.6节)。
DW_AT_location属性的值是位置表达式。位置表达式相当复杂,我建议您阅读上面引用的DWARF规范以了解更多信息。总之,位置表达式可以是具有变量位置的简单地址,也可以是调试器在运行时必须评估的小程序,以确定变量的位置。以下是一些示例位置表达式,来自DWARF规范:
理想情况下,您的编译器应为该变量发出一个位置列表,该变量描述其在程序中所有点的位置。通过寄存器跟踪变量的位置并非易事,这就是为什么一些编译器在生成调试信息时会禁用优化,例如将变量移入寄存器。
答案 1 :(得分:1)
请查看DWARF 3 spec,DATA REPRESENTATION的第7章。
例如,如果DW_AT_location的值是0x91 0x68,从第7章的表中,我们可以知道0x91表示DWARF调试信息格式是DW_OP_fbreg,而0x68是SLEB128偏移,我们可以得到它的真实值:-24。