实现在coredump文件中定位对象的方法及设备技术

技术编号:19542637 阅读:23 留言:0更新日期:2018-11-24 20:25
本申请的目的是提供一种实现在coredump文件中定位对象的方案,该方案在代码中注入关于类的标签字段,其中,在所述代码编译并运行后所生成的coredump文件中,所述类的对象包含所述字段标签。由此,对于注入过标签字段的代码,在创建这些类的对象时,将会插入字段标签的内容,由此在生成coredump文件时,其PT_LOAD Segment中保存的相应类的对象的地址信息中也会包含所述字段标签。通过扫描这些字段标签,可以定位所有使用标签字段标记过的对象,无论这些对象是否与现场信息直接相关。

Method and Equipment for Locating Objects in Coredump Files

The purpose of this application is to provide a scheme for locating objects in a coredump file. The scheme injects label fields about classes into the code. In the coredump file generated after the code is compiled and run, the objects of the classes contain the labels of the fields. Thus, for code injected with label fields, when creating objects of these classes, the contents of the field labels will be inserted. Thus, when generating coredump files, the address information of the corresponding class objects stored in its PT_LOAD Segment will also contain the field labels. By scanning these field labels, you can locate all the objects labeled with the label field, regardless of whether they are directly related to the field information.

【技术实现步骤摘要】
实现在coredump文件中定位对象的方法及设备
本申请涉及信息
,尤其涉及一种实现在coredump文件中定位对象的方案。
技术介绍
coredump文件是C/C++进程发生异常时,内核生成的一种调试转储文件。coredump文件按ELF(ExecutableandLinkableFormat、可读可链接格式)组织,但是它只有ExecutingView(执行视图),而没有LinkingView(链接视图),也就是coredump文件只有Programheaders(程序头部定义),没有SectionHeaders(分段头部定义)。所以,使用readelf命令查看coredump文件时,只能看到Segment,而看不到Section。当程序产生异常时,系统会通过coredump文件保存现场信息。coredump文件的数据结构如图1所示,包括ELFheader(ELF文件头)、Programheaders(程序头部定义)、PT_NOTESegment、PT_LOADSegment。其中,PT_NOTESegment是用于保存程序产生异常时的线程状态信息(ThreadStatus)、寄存器信息(Registers)的Segment(段),PT_LOADSegment是用于进程已映射的内存段和代码段,其中,对于属性为RX(只读可执行)的代码段,不保存其内容,而是保存其地址信息。在使用gdb、lldb(Linux、Mac平台常用的解析coredump文件的工具)等常用工具分析coredump时,可以通过线程状态信息、寄存器信息中的内容获取一些对象,但是由于PT_NOTESegment保存线程信息和寄存器信息仅仅是程序产生异常时的一些信息(即现场信息),由此获取到的对象仅仅是PT_LOADSegment中被这些线程状态信息、寄存器信息引用的一些对象,而无法定向获取现场之外的对象。申请内容本申请的一个目的是提供一种实现在coredump文件中定位对象的方案,用以解决现有技术中无法定向获取现场之外的对象的问题。为实现上述目的,本申请提供了一种设备,该设备包括:注入装置,用于在代码中注入关于类的标签字段,其中,在所述代码编译并运行后所生成的coredump文件中,所述类的对象包含所述字段标签。在一种实施例中,该设备还包括:扫描装置,用于在生成coredump文件之后,根据所述标签字段在所述coredump文件的地址段中扫描对象,定位扫描到的对象。在一种实施例中,所述标签字段包括可变字段和不可变字段,其中,所述可变字段包含所述对象的信息,所述不可变字段用于扫描coredump文件中包含的对象;所述扫描装置,用于根据所述不可变字段,扫描coredump文件中包含的对象,确定包含对象的地址段;以及根据所述可变字段,扫描包含所述对象的地址段,定位所述对象。在一种实施例中,所述可变字段包含对象的类标识;所述扫描装置,用于根据所述可变字段中对象的类标识,扫描包含所述对象的地址段,确定扫描到的对象的类。在一种实施例中,所述可变字段包含对象的类大小;所述扫描装置,用于根据所述可变字段中对象的类大小,确定扫描的地址偏移量;以及在扫描完当前对象的标签字段的地址时,跳过所述地址偏移量,扫描下一对象对应的地址。在一种实施例中,所述扫描装置,还用于在根据所述标签字段在所述coredump文件的地址段中扫描对象之前,从所述代码编译的符号表中读取所述标签字段。基于本申请的另一方面,还提供了一种方法,该方法包括:在代码中注入关于类的标签字段,其中,在所述代码编译并运行后所生成的coredump文件中,所述类的对象包含所述字段标签。在一种实施例中,该方法还包括:在生成coredump文件之后,根据所述标签字段在所述coredump文件的地址段中扫描对象,定位扫描到的对象。在一种实施例中,所述标签字段包括可变字段和不可变字段,其中,所述可变字段包含所述对象的信息,所述不可变字段用于扫描coredump文件中包含的对象;根据所述标签字段在所述coredump文件的地址段中扫描对象,定位扫描到的对象,包括:根据所述不可变字段,扫描coredump文件中包含的对象,确定包含对象的地址段;根据所述可变字段,扫描包含所述对象的地址段,定位所述对象。在一种实施例中,所述可变字段包含对象的类标识;根据所述可变字段,扫描包含所述对象的地址段,定位所述对象,包括:根据所述可变字段中对象的类标识,扫描包含所述对象的地址段,确定扫描到的对象的类。在一种实施例中,所述可变字段还包含对象的类大小;根据所述可变字段,扫描包含所述对象的地址段,包括:根据所述可变字段中对象的类大小,确定扫描的地址偏移量;在扫描完当前对象的标签字段的地址时,跳过所述地址偏移量,扫描下一对象对应的地址。在一种实施例中,根据所述标签字段在所述coredump文件的地址段中扫描对象之前,还包括:从所述代码编译的符号表中读取所述标签字段。此外,本申请还提供了一种设备,该设备包括处理器和存储有机器可读指令的一个或多个机器可读介质,当所述处理器执行所述机器可读指令时,使得所述设备执行前述任一项所述的方法。与现有技术相比,本申请提供的方案中,在代码中注入关于类的标签字段,其中,在所述代码编译并运行后所生成的coredump文件中,所述类的对象包含所述字段标签。由此,对于注入过标签字段的代码,在创建这些类的对象时,将会插入字段标签的内容,由此在生成coredump文件时,其PT_LOADSegment中保存的相应类的对象的地址信息中也会包含所述字段标签。通过扫描这些字段标签,可以定位所有使用标签字段标记过的对象,无论这些对象是否与现场信息直接相关。附图说明通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:图1示意性地示出了coredump文件的数据结构;图2示意性地示出了一种实施例中字段标签的数据结构;图3示意性地示出了coredump文件中对象的地址段内容;图4为本申请实施例提供的一种方法的示意图;图5示意性地本申请一个实施例中实现在coredump文件中定位对象时的处理流程;图6示意性地示出了可被用于实施本申请中所述的各个实施例的示例性系统;附图中相同或相似的附图标记代表相同或相似的部件。具体实施方式下面结合附图对本申请作进一步详细描述。在下面的具体描述中,给出大量特定细节,从而提供对一个实施例的透彻理解。但是,将由本领域普通技术人员理解到,一个实施例可以在没有这些特定细节的情况下实践。在其他实例中,众所周知的方法、过程、组件、单元和/或电路没有具体描述以免混淆讨论。此处,利用诸如例如为“处理”、“计算”、“运算”、“确定”、“建立”、“分析”、“检查”、或类似者的术语的讨论可以指代计算机、计算平台、计算系统、或其它电子计算设备的(多个)操作和/或(多个)处理,其操纵和/或变换呈现为计算机的寄存器和/或存储器内的物理(例如,电子)量的数据成类似地呈现为计算机的寄存器和/或存储器或其它信息存储介质内的物理量的其它数据,该计算机的寄存器和/或存储期或其它信息存储介质可以存储指令以执行操作和/或处理。引用“一个实施例”、“实施例”、“说明性的实本文档来自技高网...

【技术保护点】
1.一种设备,其中,该设备包括:注入装置,用于在代码中注入关于类的标签字段,其中,在所述代码编译并运行后所生成的coredump文件中,所述类的对象包含所述字段标签。

【技术特征摘要】
1.一种设备,其中,该设备包括:注入装置,用于在代码中注入关于类的标签字段,其中,在所述代码编译并运行后所生成的coredump文件中,所述类的对象包含所述字段标签。2.根据权利要求1所述的设备,其中,该设备还包括:扫描装置,用于在生成coredump文件之后,根据所述标签字段在所述coredump文件的地址段中扫描对象,定位扫描到的对象。3.根据权利要求2所述的设备,其中,所述标签字段包括可变字段和不可变字段,其中,所述可变字段包含所述对象的信息,所述不可变字段用于扫描coredump文件中包含的对象;所述扫描装置,用于根据所述不可变字段,扫描coredump文件中包含的对象,确定包含对象的地址段;以及根据所述可变字段,扫描包含所述对象的地址段,定位所述对象。4.根据权利要求3所述的设备,其中,所述可变字段包含对象的类标识;所述扫描装置,用于根据所述可变字段中对象的类标识,扫描包含所述对象的地址段,确定扫描到的对象的类。5.根据权利要求4所述的设备,其中,所述可变字段包含对象的类大小;所述扫描装置,用于根据所述可变字段中对象的类大小,确定扫描的地址偏移量;以及在扫描完当前对象的标签字段的地址时,跳过所述地址偏移量,扫描下一对象对应的地址。6.根据权利要求2至5中任一项所述的设备,其中,所述扫描装置,还用于在根据所述标签字段在所述coredump文件的地址段中扫描对象之前,从所述代码编译的符号表中读取所述标签字段。7.一种方法,其中,该方法包括:在代码中注入关于类的标签字段,其中,在所述代码编译并运行后所生成的coredump文件中,所述类的对象包含所...

【专利技术属性】
技术研发人员:杨江华
申请(专利权)人:阿里巴巴集团控股有限公司
类型:发明
国别省市:开曼群岛,KY

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1