变量声明为
volatile bool is_usage_mode_convenience_activated = true;
它以正确的地址显示在链接器映射文件中,但我在ELF符号表中找不到它(用readelf -s检查)。
小调试信息(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确实描述了该变量的唯一声明。
什么情况会导致这种情况?变量声明没有什么奇怪的。
它实际上是在符号表中,但由于readelf只写第n个字符,grep错过了它。使用显示整个符号的不同工具显示它确实存在于符号表中。不过还是很奇怪,它没有location属性。