1

假设一个 C 模块包含以下函数定义:

void foo(int (*a)[6]){...}


是否可以从使用 gcc -g 编译源文件时获得的 dwarf 信息(嵌入在生成的 .o 文件中)中提取参数“a”的实际数组大小信息“6”?

我在目标文件上应用了“readelf -wi”来获取 dwarf 信息,但我找不到任何信息来导出固定数组大小。

4

1 回答 1

1

使用 Fedora 20 系统 gcc 对我来说没问题。它是否适用于其他版本的 gcc,我不知道......我不记得这方面的具体变化,但是 gcc 确实发生了相当大的变化。

无论如何,我使用 gcc -g 编译了一个类似上面的片段。然后我用“readelf -wi”检查了它。这会转储 DWARF 信息。我懂了:

 <1><57>: Abbrev Number: 4 (DW_TAG_array_type)
    <58>   DW_AT_type        : <0x6e>   
    <5c>   DW_AT_sibling     : <0x67>   
 <2><60>: Abbrev Number: 5 (DW_TAG_subrange_type)
    <61>   DW_AT_type        : <0x67>   
    <65>   DW_AT_upper_bound : 5        

...作为参数“a”的类型。那里的子范围类型显示了界限。

于 2014-06-05T02:34:21.657 回答