假设一个 C 模块包含以下函数定义:
void foo(int (*a)[6]){...}
是否可以从使用 gcc -g 编译源文件时获得的 dwarf 信息(嵌入在生成的 .o 文件中)中提取参数“a”的实际数组大小信息“6”?
我在目标文件上应用了“readelf -wi”来获取 dwarf 信息,但我找不到任何信息来导出固定数组大小。
假设一个 C 模块包含以下函数定义:
void foo(int (*a)[6]){...}
是否可以从使用 gcc -g 编译源文件时获得的 dwarf 信息(嵌入在生成的 .o 文件中)中提取参数“a”的实际数组大小信息“6”?
我在目标文件上应用了“readelf -wi”来获取 dwarf 信息,但我找不到任何信息来导出固定数组大小。
使用 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”的类型。那里的子范围类型显示了界限。