c++矮标签编号格式
c++ dwarf tag numbering format
考虑下面的示例代码-
<0><b>: Abbrev Number: 1 (DW_TAG_compile_unit)
<c> DW_AT_producer : (indirect string, offset: 0xd): GNU C++ 4.3.0 20080428 (Red Hat 4.3.0-8)
<10> DW_AT_language : 4 (C++)
<11> DW_AT_name : (indirect string, offset: 0x75): test.cpp
<15> DW_AT_comp_dir : (indirect string, offset: 0x4d): /home/dwarf
<19> DW_AT_low_pc : 0x0
<21> DW_AT_high_pc : 0xb
<29> DW_AT_stmt_list : 0x0
<1><2d>: Abbrev Number: 2 (DW_TAG_class_type)
<2e> DW_AT_name : C
<30> DW_AT_byte_size : 8
<31> DW_AT_decl_file : 1
<32> DW_AT_decl_line : 1
<33> DW_AT_sibling : <0x86>
<2><37>: Abbrev Number: 3 (DW_TAG_member)
<38> DW_AT_name : x
<3a> DW_AT_decl_file : 1
<3b> DW_AT_decl_line : 7
<3c> DW_AT_type : <0x86>
<40> DW_AT_data_member_location: 2 byte block: 23 0 (DW_OP_plus_uconst: 0)
<43> DW_AT_accessibility: 3 (private)
<2><44>: Abbrev Number: 3 (DW_TAG_member)
<45> DW_AT_name : y
<47> DW_AT_decl_file : 1
<48> DW_AT_decl_line : 8
<49> DW_AT_type : <0x86>
<4d> DW_AT_data_member_location: 2 byte block: 23 4 (DW_OP_plus_uconst: 4)
<50> DW_AT_accessibility: 3 (private)
我一直在研究一个解析小文件的程序,我不确定它的一部分。如果您注意到,每个标记的左侧都有一个额外的数字(在本例中有<0>、<1>和<2>)。我不太确定那是什么。我认为这是某种堆栈级别之类的东西,因为<0>是给整个程序的,<1>是给顶层类的,<2>是给它的成员变量的。但是,我没有在文档中找到任何关于它的内容。供参考,这里是原始程序-
class C {
public:
C();
C(int x, int y);
int getX();
private:
int x;
int y;
};
class SubC : public C {
int z;
};
int f() {return 0;}
C c;
SubC subC;
int i;
double d;
DWARF DIEs被组织成一个树——单个文件的顶层DW_TAG_compile_unit
将包含所有类型定义(例如DW_TAG_class_type
)、所有函数(DW_TAG_subprogram
)和全局/静态变量(DW_TAG_variable
)。类定义(DW_TAG_class_type
)将是父DIE,并包含子DIE,如成员变量的DW_TAG_member
或方法的DW_TAG_subprogram
。
您附加的输出是您的特定DWARF转储程序的操作方式—它看起来像是使用该数字来显示父/子关系。这是readelf
吗?其他侏儒转储程序可能选择以不同的方式显示此内容。在Mac OS X上,dwarfdump
显示了与缩进的关系-子die比父die缩进多一点。
如果你在http://dwarfstd.org/上查看DWARF规范,你不会在标准中找到任何关于这个数字的内容——但是如果你编写一个真正的DWARF解析器(而不是解释readelf
或其他输出的解析器),你会在DWARF4规范的第2.3节("调试信息项的关系")和第7.5.3节"缩写表"(DW_CHILDREN_yes
或DW_CHILDREN_no
)中看到这个主题。
相关文章:
- 如何在openssl-ecc中获取十六进制格式的私钥
- 将"打开的CV图像"中的"颜色"转换为整数格式
- TDateTime格式在C++Builder中不会更改
- 如何防止clang格式在流运算符调用之间添加换行符<<
- 检查不带转换的扫描格式
- 当我尝试使用 sstream 和分面将 Boost Time_duration转换为字符串时,我没有得到所需的格式
- 是否可以从格式字符串中检索"width"
- clang格式:宏的缩进
- clang格式:禁用排序包含
- 在用于格式4的arm模拟器中实现功能时的一个问题
- 将RGB图像保存为PPM格式
- 询问在设计我的手臂模拟器功能表示格式1
- 当使用比格式支持的精度更高的精度来显示数字时,会写出什么数据
- 带有Protobuf序列化的C++Hazelcast:字符串不是UTF-8格式的
- 如何将strftime中的格式错误作为异常捕获
- 将CHW格式的浮点向量转换为cv::Mat
- 如何将二进制格式的 C++ 对象的 std::vector 保存到磁盘?
- 如何以叮当格式设置评论的行长?
- 如何为输入设置变量编号和__android_log_print格式
- c++矮标签编号格式