【问题标题】:use and meaning of DW_AT_locationDW_AT_location的用途和意义
【发布时间】:2012-03-15 12:01:54
【问题描述】:

我想知道使用属性 DW_AT_location 进行调试。它是 dwarf 为调试指定的属性之一,但无法真正理解它究竟代表什么。以及当我们编译代码时应该何时发出这个属性。

【问题讨论】:

    标签: dwarf llvm-3.0


    【解决方案1】:

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

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

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

    理想情况下,您的编译器应该为一个变量生成一个位置列表,描述其在程序中所有点的位置。通过寄存器跟踪变量的位置并非易事,这就是为什么一些编译器在生成调试信息时会禁用优化,例如将变量移动到寄存器中。

    【讨论】:

      【解决方案2】:

      请查看DWARF 3 spec 的第 7 章,数据表示。

      例如,如果DW_AT_location的值为0x91 0x68,从第7章的表格中,我们可以知道0x91表示DWARF调试信息格式,即DW_OP_fbreg,0x68是SLEB128的偏移量,我们可以得到它的真实值值:-24。

      【讨论】:

      • 这个 sleb128 偏移量到底是多少?为什么这么复杂而不是简单的 -24?
      • @langlauf.io LEB/SLEB 格式允许值的字节长度可变。
      猜你喜欢
      • 2011-09-26
      • 2020-07-13
      • 1970-01-01
      • 1970-01-01
      • 2011-11-29
      • 1970-01-01
      • 2020-06-01
      • 2016-03-05
      • 1970-01-01
      相关资源
      最近更新 更多