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