加速访问(Accelerated Access)

按名称查找,查找数据对象或函数:调试器经常需要在tracee暂停执行时,查找当前编译单元中某个符号名称对应的数据对象或者函数的调试信息,可能位于其他编译单元中。 有时,调试器只知道程序构造(变量、函数、类型等)的名称,有时只有地址。 要仅通过DWARF调试信息条目DIEs按名称查找,调试器将需要对每个编译单元内的所有DIEs进行遍历。

按名称查找,查找类型:同样,在要求类型名称始终引用相同具体类型(例如C++)的语言中,编译器可以选择在所有编译单元中排除冗余的类型定义。 在这种情况下,调试器需要一种快速的方法来按名称查找具体的类型定义。 与定义全局数据对象一样,这将需要搜索程序中所有编译单元的所有类型定义相关的DIEs。

按地址查找:要查找与子例程相关的调试信息,给定地址,调试器可以使用编译单元CIE的上下pc属性快速缩小搜索范围,但是这些属性仅涵盖与编译单元条目关联的代码段的地址范围。 为了找到与数据对象相关的调试信息,给定一个地址,将需要进行详尽的搜索。 此外,对大型程序中不同编译单元的调试信息条目进行的任何搜索都可能需要访问许多内存页面,这可能会影响调试器的性能。

为了更快地按名称或按地址查找程序实体(数据对象,函数和类型),DWARF信息的生产者可以额外生成三种不同类型的表,表中包含了特定编译单元条目拥有的调试信息条目的相关信息,表中的数据也更加紧凑。

按名字查询(Lookup by Name)

为了支持按名称查找,两个表分别保存在名为.debug_pubnames (用于数据对象和函数)和.debug_pubtypes (用于类型)的单独的对象文件section中。 每个表都是一个可变长度条目的集合。.debug_pubnames描述全局对象、函数的名称,.debug_pubtypes描述全局类型,这些数据对象、函数、类型的定义,由单个编译单元拥有的DIEs表示。

按地址查询(Lookup by Address)

为了支持按地址查找,在一个单独的对象文件section中维护一个表.debug_aranges。 该表由多组可变长度的条目组成,每个编译单元占据程序地址空间的不同部分,每组条目描述单个编译单元所占有的程序地址空间的一部分。

results matching ""

    No results matching ""