【发布时间】:2021-12-06 17:40:55
【问题描述】:
一个变量被声明为
volatile bool is_usage_mode_convenience_activated = true;
它以正确的地址显示在链接器映射文件中,但我在 ELF 符号表中找不到它(使用 readelf -s 检查)。
dwarf调试信息(readelf --debug-dump=info)如下
<2><42019>: Abbrev Number: 104 (DW_TAG_variable)
<4201a> DW_AT_name : (indirect string, offset: 0x433aa): is_usage_mode_convenience_activated
<4201e> DW_AT_decl_file : 3
<4201f> DW_AT_decl_line : 21
<42020> DW_AT_linkage_name: (indirect string, offset: 0x49717): _ZN20vehiclemodesprovider35is_usage_mode_convenience_activatedE
<42024> DW_AT_type : <0x392a3>
<42028> DW_AT_external : 1
<42028> DW_AT_declaration : 1
我希望 a 找到 DW_AT_location 而不是 DW_AT_declaration。程序中没有此变量的外部声明,因此 DW_TAG_variable 确实描述了该变量的唯一声明。
什么情况会导致这种情况?变量声明没有什么奇怪的。
【问题讨论】:
-
gdb 看到了吗?
-
readelf -s或readelf -a怎么样? -
这是
vehiclemodesprovider类的成员变量,对吧? -
我删除了c,因为这不是 C 程序;标签具有误导性。
-
@CraigEstey 没看到,这就是我所说的 readelf 检查的符号表的意思,已经在帖子中澄清了这一点。