CN108874448B - 实现在coredump文件中定位对象的方法及设备 - Google Patents

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

Info

Publication number
CN108874448B
CN108874448B CN201710322576.3A CN201710322576A CN108874448B CN 108874448 B CN108874448 B CN 108874448B CN 201710322576 A CN201710322576 A CN 201710322576A CN 108874448 B CN108874448 B CN 108874448B
Authority
CN
China
Prior art keywords
field
scanning
address
class
tag
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201710322576.3A
Other languages
English (en)
Other versions
CN108874448A (zh
Inventor
杨江华
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Alibaba Group Holding Ltd
Original Assignee
Alibaba Group Holding Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Alibaba Group Holding Ltd filed Critical Alibaba Group Holding Ltd
Priority to CN201710322576.3A priority Critical patent/CN108874448B/zh
Publication of CN108874448A publication Critical patent/CN108874448A/zh
Application granted granted Critical
Publication of CN108874448B publication Critical patent/CN108874448B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/20Software design
    • G06F8/24Object-oriented
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0766Error or fault reporting or storing
    • G06F11/0778Dumping, i.e. gathering error/state information after a fault for later diagnosis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Health & Medical Sciences (AREA)
  • Biomedical Technology (AREA)
  • Quality & Reliability (AREA)
  • Debugging And Monitoring (AREA)

Abstract

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

Description

实现在coredump文件中定位对象的方法及设备
技术领域
本申请涉及信息技术领域,尤其涉及一种实现在coredump文件中定位对象的方案。
背景技术
coredump文件是C/C++进程发生异常时,内核生成的一种调试转储文件。coredump文件按ELF(Executable and Linkable Format、可读可链接格式)组织,但是它只有Executing View(执行视图),而没有LinkingView(链接视图),也就是coredump文件只有Program headers(程序头部定义),没有Section Headers(分段头部定义)。所以,使用readelf命令查看coredump文件时,只能看到Segment,而看不到Section。
当程序产生异常时,系统会通过coredump文件保存现场信息。coredump文件的数据结构如图1所示,包括ELF header(ELF文件头)、Program headers(程序头部定义)、PT_NOTE Segment、PT_LOAD Segment。其中,PT_NOTE Segment是用于保存程序产生异常时的线程状态信息(Thread Status)、寄存器信息(Registers)的Segment(段),PT_LOADSegment是用于进程已映射的内存段和代码段,其中,对于属性为RX(只读可执行)的代码段,不保存其内容,而是保存其地址信息。
在使用gdb、lldb(Linux、Mac平台常用的解析coredump文件的工具)等常用工具分析coredump时,可以通过线程状态信息、寄存器信息中的内容获取一些对象,但是由于PT_NOTE Segment保存线程信息和寄存器信息仅仅是程序产生异常时的一些信息(即现场信息),由此获取到的对象仅仅是PT_LOAD Segment中被这些线程状态信息、寄存器信息引用的一些对象,而无法定向获取现场之外的对象。
申请内容
本申请的一个目的是提供一种实现在coredump文件中定位对象的方案,用以解决现有技术中无法定向获取现场之外的对象的问题。
为实现上述目的,本申请提供了一种设备,该设备包括:
注入装置,用于在代码中注入关于类的标签字段,其中,在所述代码编译并运行后所生成的coredump文件中,所述类的对象包含所述字段标签。
在一种实施例中,该设备还包括:
扫描装置,用于在生成coredump文件之后,根据所述标签字段在所述coredump文件的地址段中扫描对象,定位扫描到的对象。
在一种实施例中,所述标签字段包括可变字段和不可变字段,其中,所述可变字段包含所述对象的信息,所述不可变字段用于扫描coredump文件中包含的对象;
所述扫描装置,用于根据所述不可变字段,扫描coredump文件中包含的对象,确定包含对象的地址段;以及根据所述可变字段,扫描包含所述对象的地址段,定位所述对象。
在一种实施例中,所述可变字段包含对象的类标识;
所述扫描装置,用于根据所述可变字段中对象的类标识,扫描包含所述对象的地址段,确定扫描到的对象的类。
在一种实施例中,所述可变字段包含对象的类大小;
所述扫描装置,用于根据所述可变字段中对象的类大小,确定扫描的地址偏移量;以及在扫描完当前对象的标签字段的地址时,跳过所述地址偏移量,扫描下一对象对应的地址。
在一种实施例中,所述扫描装置,还用于在根据所述标签字段在所述coredump文件的地址段中扫描对象之前,从所述代码编译的符号表中读取所述标签字段。
基于本申请的另一方面,还提供了一种方法,该方法包括:
在代码中注入关于类的标签字段,其中,在所述代码编译并运行后所生成的coredump文件中,所述类的对象包含所述字段标签。
在一种实施例中,该方法还包括:
在生成coredump文件之后,根据所述标签字段在所述coredump文件的地址段中扫描对象,定位扫描到的对象。
在一种实施例中,所述标签字段包括可变字段和不可变字段,其中,所述可变字段包含所述对象的信息,所述不可变字段用于扫描coredump文件中包含的对象;
根据所述标签字段在所述coredump文件的地址段中扫描对象,定位扫描到的对象,包括:
根据所述不可变字段,扫描coredump文件中包含的对象,确定包含对象的地址段;
根据所述可变字段,扫描包含所述对象的地址段,定位所述对象。
在一种实施例中,所述可变字段包含对象的类标识;
根据所述可变字段,扫描包含所述对象的地址段,定位所述对象,包括:
根据所述可变字段中对象的类标识,扫描包含所述对象的地址段,确定扫描到的对象的类。
在一种实施例中,所述可变字段还包含对象的类大小;
根据所述可变字段,扫描包含所述对象的地址段,包括:
根据所述可变字段中对象的类大小,确定扫描的地址偏移量;
在扫描完当前对象的标签字段的地址时,跳过所述地址偏移量,扫描下一对象对应的地址。
在一种实施例中,根据所述标签字段在所述coredump文件的地址段中扫描对象之前,还包括:
从所述代码编译的符号表中读取所述标签字段。
此外,本申请还提供了一种设备,该设备包括处理器和存储有机器可读指令的一个或多个机器可读介质,当所述处理器执行所述机器可读指令时,使得所述设备执行前述任一项所述的方法。
与现有技术相比,本申请提供的方案中,在代码中注入关于类的标签字段,其中,在所述代码编译并运行后所生成的coredump文件中,所述类的对象包含所述字段标签。由此,对于注入过标签字段的代码,在创建这些类的对象时,将会插入字段标签的内容,由此在生成coredump文件时,其PT_LOAD Segment中保存的相应类的对象的地址信息中也会包含所述字段标签。通过扫描这些字段标签,可以定位所有使用标签字段标记过的对象,无论这些对象是否与现场信息直接相关。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:
图1示意性地示出了coredump文件的数据结构;
图2示意性地示出了一种实施例中字段标签的数据结构;
图3示意性地示出了coredump文件中对象的地址段内容;
图4为本申请实施例提供的一种方法的示意图;
图5示意性地本申请一个实施例中实现在coredump文件中定位对象时的处理流程;
图6示意性地示出了可被用于实施本申请中所述的各个实施例的示例性系统;
附图中相同或相似的附图标记代表相同或相似的部件。
具体实施方式
下面结合附图对本申请作进一步详细描述。
在下面的具体描述中,给出大量特定细节,从而提供对一个实施例的透彻理解。但是,将由本领域普通技术人员理解到,一个实施例可以在没有这些特定细节的情况下实践。在其他实例中,众所周知的方法、过程、组件、单元和/或电路没有具体描述以免混淆讨论。
此处,利用诸如例如为“处理”、“计算”、“运算”、“确定”、“建立”、“分析”、“检查”、或类似者的术语的讨论可以指代计算机、计算平台、计算系统、或其它电子计算设备的(多个)操作和/或(多个)处理,其操纵和/或变换呈现为计算机的寄存器和/或存储器内的物理(例如,电子)量的数据成类似地呈现为计算机的寄存器和/或存储器或其它信息存储介质内的物理量的其它数据,该计算机的寄存器和/或存储期或其它信息存储介质可以存储指令以执行操作和/或处理。
引用“一个实施例”、“实施例”、“说明性的实施例”、“各种实施例”等指示这样描述的(多个)实施例可以包括特别的特征、结构或特性,但是不是每个实施例一定包括特别的特征、结构、或特性。进一步,措词“在一个实施例中”的重复使用不一定指代相同的实施例。
如这里所使用的,除非另有规定,使用序数形容词“第一”、“第二”、“第三”等来描述通用的对象仅仅指示指代类似的对象的不同的实例并且不意图暗示这样描述的对象必须是所给定的顺序,该给定的顺序为时间、空间、排序、或以任意其它方式的。
某些实施例可以结合各种设备和系统使用,例如,个人计算机(PC)、台式计算机、移动计算机、膝上型计算机、笔记本计算机、平板计算机、智能手机设备、服务器计算机、手持计算机、手持设备、个人数字助理(PDA)设备、手持PDA设备、混合设备、车载设备、移动或便携式设备、消费者设备、非移动或非便携式设备、无线通信站、无线通信设备、无线接入点(AP)、有线或无线路由器、有线或无线调制解调器、视频设备、音频设备、音频-视频(A/V)设备、有线或无线网络、具有一个或多个内置天线和/或外置天线的设备、数字视频广播(DVB)设备或系统、多标准无线电设备或系统、有线或无线手持设备,例如,智能手机、无线应用协议(WAP)设备以及类似者。
在以下详细说明中,参考构成本文的一部分的附图,其中相同的数字在全文中指相同的部分,并且其中阐述的实施例为本发明的主题可实现的。应当知道可使用其他实施例,并且可实现不脱离本发明范围的结构或逻辑的改变。因此,以下详细说明不是为了限制的意思,并且实施例的范围限定在附带的权利要求和它们的等同替代。
各种操作以理解声称的主题最有帮助的方式描述为多个离散的动作或轮流操作。然而,说明书的顺序不应当解释为暗示这些操作为必要的相关顺序。特别地,这些操作不按照呈现的顺序执行。本文描述的操作以描述的实施例不同的顺序来执行。不同的附带操作可被执行和/或在附带的实施例中省略描述的操作。
此外,本申请描述中的短语“A和/或B”意味着(A)、(B)或(A和B);短语“A、B和/或C”意味着(A)、(B)、(C)、(A和B)、(A和C)、(B和C)或(A、B和C)。
本申请实施例提供了一种设备,该设备可以对代码进行编译,并运行编译生成的二进制的代码,在运行过程中若程序出现异常,将会生成保存有现场信息的coredump文件。所述设备包括一注入装置,用于在代码中注入关于类(class)的标签字段(tag),使得注入标签字段的代码编译并运行后所生成的coredump文件中,所述类的对象(object)包含所述字段标签。
例如,本实施例中定义的关于类A的64位整型的标签字段如下:
longlong inspect_tag_a=0x001000FBFDFDFDFD;
针对类A的对象采用如下方式进行注入:
class A{longlong tag=inspect_tag_a;int height,int weight;};
其中,int height和int weight分别为类A本身的变量。
对于注入过标签字段的代码,在创建这些类的对象时,将会插入字段标签的内容,由此在生成coredump文件时,其PT_LOAD Segment中保存的相应类的对象的地址信息中也会包含所述字段标签。通过扫描这些字段标签,可以定位所有使用标签字段标记过的对象,无论这些对象是否与现场信息直接相关。
在一个实施例中,还提供了一种设备,该设备包括注入装置和扫描装置,所述注入装置用于在代码中注入关于类的标签字段,所述扫描装置用于在生成coredump文件之后,根据所述标签字段在所述coredump文件的地址段中扫描对象,定位扫描到的对象。在实际场景中,程序在运行出现异常时,例如内存泄漏造成死机等情况,会生成coredump文件,此外也可以由用户主动控制设备生成coredump,例如使用gdb的gcore命令能够主动生成程序的coredump文件。
例如,程序在出现异常时,正在创建对象B,因此通过coredump文件中的现场信息可以定位对象B,获取对象B的相关信息。若实际引起异常的原因(例如对象A内存泄漏)与对象B无关,而是与对象A相关。但是由于对象A创建于较长的时间之前,并应当在创建对象B之前释放关于对象A的内存,因此通过现场信息无法获取到对象A的信息,此时,现有技术就无法定位对象A,并进一步确定引起异常的原因,而本实施例方案会在代码中注入了关于对象A的类的标签字段,由此,可以通过标签字段扫描PT_LOAD Segment中所有包含标签字段的内容,获取所有关于对象A、对象B的信息。
例如,对于内存泄漏的情况,采用本实施例的方案对象A的成员变量的指针应当在被释放,而通过扫描定位到所述对象A,并发现对象A的成员变量的指针不为空、且合法可读,因此可能出现了内存泄漏。而现有技术中由于无法定位到对象A,因此无法定向获取对象A的相关信息,因此无法通过coredump文件分析出引起异常的原因。
在一个实施例中,所述标签字段会保存在所述代码编译的符号表中,所述扫描装置在根据所述标签字段在所述coredump文件的地址段中扫描对象之前,可以从所述代码编译的符号表中读取所述标签字段,以用于后续的扫描过程。
在一个实施例中,所述标签字段可以包含两部分内容,即可变字段和不可变字段,其中,所述可变字段包含所述对象的信息,这些信息可以是各个对象的个性化信息,例如对象的类标识、类大小等信息,可用以区分不同类的对象。而不可变字段能够用于扫描coredump文件中包含的对象,即能够确定存在对象,但无法用于区分这些对象。
由此,所述扫描装置在coredump文件中扫描、定位对象时,可以根据所述不可变字段,扫描coredump文件中包含的对象,确定包含对象的地址段,并且根据所述可变字段,扫描包含所述对象的地址段,定位所述对象。其中,定位所述对象是指在coredump文件中扫描到所述对象在PT_LOAD Segment中的地址,并通过识别其可变字段的内容,确定所述对象的信息。
在一个实施例中,若采用64位整型的字段标签,则可以将字段标签高位的4个字节作为可变字段,将低位的4个字节作为不可变字段,其数据结构如图2所示。在此,本领域技术人员应当能够理解上述字段标签的长度、数据类型以及对可变字段、不可变字段的划分均为举例,在实际场景中可以根据不同的应用需求进行改变,其他现有的或今后可能出现的任意实现方式如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
在一个实施例中,若所述可变字段包含对象的类标识,则扫描装置在根据所述可变字段,扫描包含所述对象的地址段,定位所述对象时,可以根据所述可变字段中对象的类标识,扫描包含所述对象的地址段,确定扫描到的对象的类。由此,基于字段标签对PT_LOADSegment的扫描,至少可以获知coredump中包含了多少个对象以及这些对象的类。
在另一实施例中,可变字段还可以包含对象的类大小,所述对象的类大小即为某一对象占用内存的大小,除了可以用于区分不同类的对象之外,还可以提升扫描的速度。即扫描装置在根据所述可变字段,扫描包含所述对象的地址段时,可以根据所述可变字段中对象的类大小,确定扫描的地址偏移量;然后在扫描完当前对象的标签字段的地址时,跳过所述地址偏移量,扫描下一对象对应的地址。由于在定位对象时,无需扫描象本身的具体内容,因此可以将对象的标签字段位于对象定义的首地址,通过将对象的类大小作为地址偏移量,在扫描完当前对象的标签字段的地址时,可以跳过后续表示对象具体内容的地址的扫描,从而减少扫描的数据量,提升扫描速度。
图3示意性地示出了coredump文件的PT_LOAD Segment中关于某一对象的地址段内容。其中,可变字段包括了两部分内容,类大小和类标识,对于4个字节长度的可变字段,可以将其高2位的字节定义为类大小,将其低2位的字节定义为类标识,由此,类大小的范围为1~65535(对于超过该大小的对象,定义为0),而类标识最多支持65535个类。以前述定义的标签字段longlong inspect_tag_a=0x001000FBFDFDFDFD为例,类大小为0x0010,类标识为0x 00FB,不可变字段为0x FDFDFDFD(0x表示十六进制)。对象内容部分包含了对象的私有属性,例如本实施例中为Weight和Height两项。在此场景下,基于所述标签字段的扫描,在定位对象之后,可以获取并输出如下内容:
类标识1|对象数量|内存大小
类标识2|对象数量|内存大小
……
基于同一发明构思,本申请的实施例还提供了相应的方法,该方法对应的设备是前述实施例中所提供的设备,并且其解决问题的原理与这些设备相似。
本申请实施例提供了一种方法,该方法可以对代码进行编译,并运行编译生成的二进制的代码,在运行过程中若程序出现异常,将会生成保存有现场信息的coredump文件。在进行编译时,由注入装置或其它装置在代码中注入关于类(class)的标签字段(Tag),使得注入标签字段的代码编译并运行后所生成的coredump文件中,所述类的对象(object)包含所述字段标签。
例如,本实施例中定义的关于类A的64位整型的标签字段如下:
longlong inspect_tag_a=0x001000FBFDFDFDFD;
针对类A的对象采用如下方式进行注入:
class A{longlong tag=inspect_tag_a;int height,int weight;};
其中,int height和int weight分别为类A本身的变量。
对于注入过标签字段的代码,在创建这些类的对象时,将会插入字段标签的内容,由此在生成coredump文件时,其PT_LOAD Segment中保存的相应类的对象的地址信息中也会包含所述字段标签。通过扫描这些字段标签,可以定位所有使用标签字段标记过的对象,无论这些对象是否与现场信息直接相关。
在一个实施例中,还提供了一种方法,该方法的处理流程如图4所示,包括:
方框401,由注入装置或其它装置在代码中注入关于类的标签字段,其中,在所述代码编译并运行后所生成的coredump文件中,所述类的对象包含所述字段标签
方框402,由扫描装置或其它装置在生成coredump文件之后,根据所述标签字段在所述coredump文件的地址段中扫描对象,定位扫描到的对象。在实际场景中,程序在运行出现异常时,例如内存泄漏造成死机等情况,会生成coredump文件,此外也可以由用户主动控制设备生成coredump,例如使用gdb的gcore命令能够主动生成程序的coredump文件。
例如,程序在出现异常时,正在创建对象B,因此通过coredump文件中的现场信息可以定位对象B,获取对象B的相关信息。若实际引起异常的原因(例如对象A内存泄漏)与对象B无关,而是与对象A相关。但是由于对象A创建于较长的时间之前,并应当在创建对象B之前释放关于对象A的内存,因此通过现场信息无法获取到对象A的信息,此时,现有技术就无法定位对象A,并进一步确定引起异常的原因,而本实施例方案会在代码中注入了关于对象A的类的标签字段,由此,可以通过标签字段扫描PT_LOAD Segment中所有包含标签字段的内容,获取所有关于对象A、对象B的信息。
例如,对于内存泄漏的情况,采用本实施例的方案对象A的成员变量的指针应当在被释放,而通过扫描定位到所述对象A,并发现对象A的成员变量的指针不为空、且合法可读,因此可能出现了内存泄漏。而现有技术中由于无法定位到对象A,因此无法定向获取对象A的相关信息,因此无法通过coredump文件分析出引起异常的原因。
在一个实施例中,所述标签字段会保存在所述代码编译的符号表中,在根据所述标签字段在所述coredump文件的地址段中扫描对象之前,可以由扫描装置或其它装置从所述代码编译的符号表中读取所述标签字段,以用于后续的扫描过程。
在一个实施例中,所述标签字段可以包含两部分内容,即可变字段和不可变字段,其中,所述可变字段包含所述对象的信息,这些信息可以是各个对象的个性化信息,例如对象的类标识、类大小等信息,可用以区分不同类的对象。而不可变字段能够用于扫描coredump文件中包含的对象,即能够确定存在对象,但无法用于区分这些对象。
由此,在coredump文件中扫描、定位对象时,可以由扫描装置或其它装置根据所述不可变字段,扫描coredump文件中包含的对象,确定包含对象的地址段,并且根据所述可变字段,扫描包含所述对象的地址段,定位所述对象。其中,定位所述对象是指在coredump文件中扫描到所述对象在PT_LOAD Segment中的地址,并通过识别其可变字段的内容,确定所述对象的信息。
在一个实施例中,若采用64位整型的字段标签,则可以将字段标签高位的4个字节作为可变字段,将低位的4个字节作为不可变字段,其数据结构如图2所示。在此,本领域技术人员应当能够理解上述字段标签的长度、数据类型以及对可变字段、不可变字段的划分均为举例,在实际场景中可以根据不同的应用需求进行改变,其他现有的或今后可能出现的任意实现方式如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
在一个实施例中,若所述可变字段包含对象的类标识,则在根据所述可变字段,扫描包含所述对象的地址段,定位所述对象时,可以由扫描装置或其它装置根据所述可变字段中对象的类标识,扫描包含所述对象的地址段,确定扫描到的对象的类。由此,基于字段标签对PT_LOAD Segment的扫描,至少可以获知coredump中包含了多少个对象以及这些对象的类。
在另一实施例中,可变字段还可以包含对象的类大小,所述对象的类大小除了可以用于区分不同类的对象之外,还可以提升扫描的速度。即在根据所述可变字段,扫描包含所述对象的地址段时,可以由扫描装置或其它装置根据所述可变字段中对象的类大小,确定扫描的地址偏移量;然后在扫描完当前对象的标签字段的地址时,跳过所述地址偏移量,扫描下一对象对应的地址。由于在定位对象时,无需扫描象本身的具体内容,因此可以将对象的标签字段位于对象定义的首地址,通过将对象的类大小作为地址偏移量,在扫描完当前对象的标签字段的地址时,可以跳过后续表示对象具体内容的地址的扫描,从而减少扫描的数据量,提升扫描速度。
图3示意性地示出了coredump文件的PT_LOAD Segment中关于某一对象的地址段内容。其中,可变字段包括了两部分内容,类大小和类标识,对于4个字节长度的可变字段,可以将其高2位的字节定义为类大小,将其低2位的字节定义为类标识,由此,类大小的范围为1~65535(对于超过该大小的对象,定义为0),而类标识最多支持65535个类。以前述定义的标签字段longlong inspect_tag_a=0x001000FBFDFDFDFD为例,类大小为0x0010,类标识为0x 00FB,不可变字段为0x FDFDFDFD(0x表示十六进制)。对象内容部分包含了对象的私有属性,例如本实施例中为Weight和Height两项。在此场景下,基于所述标签字段的扫描,在定位对象之后,可以获取并输出如下内容:
类标识1|对象数量|内存大小
类标识2|对象数量|内存大小
……
图5示意性地本申请一个实施例中实现在coredump文件中定位对象时的处理流程,具体如下:
方框501,对关键类注入字段标签(tag)。其中,所述关键类是程序中用户指定的一个或多个类,可以根据实际需求(例如判断某些异常原因所必须的类)选择程序中的全部或者部分类。字段标签的具体形式可以如图3中所示。
方框502,对程序的代码进行编译,得到二进制的代码并运行,字段标签保存在编译的符号表中。
方框503,在出现异常时,生成coredump文件。
方框504,在未出现异常时,也可以通过调试工具主动(例如gdb的gcore命令)的生成coredump文件。
方框505,在符号表中读取向程序注入的字段标签。
方框506,扫描coredump文件的PT_LOAD Segment,匹配字段标签低4位的字节(不可变字段)。
方框507,在匹配到相应的内容时,读取PT_LOAD Segment中高4位字节的地址,与注入的字段标签中的高4位字节匹配(可变字段),确定该对象的类大小和类标识,从而定位此对象。同时,可以根据对象的类大小确定地址偏移值,在扫描完一个对象的字段标签时,可以基于地址偏移值进行扫描地址的跳转,跳过当前对象具体内容的地址段,从而提高扫描速度。
方框508,当字段标签低4位的字节未匹配到相应的内容时,扫描下一段地址段。
方框509,判断所有地址段是否扫描,若为是,执行方框510的内容,若为否,从下一段地址段开始执行方框506的内容。
方框510,输出统计信息。在本申请中,所述统计信息可以是关于定位的所有对象的信息,也可以是其中某些指定对象的信息等。
本实施例可被实现为使用任意适当的硬件和/或软件进行想要的配置的系统。图6示意性地示出了可被用于实现本申请实施例中所述的各个实施例的示例性系统600。对于一个实施例,图6示出了示例性系统600,该系统具有一个或多个处理器605、被耦合到(一个或多个)处理器605中的至少一个的系统控制模块610、被耦合到系统控制模块610的系统存储器615、被耦合到系统控制模块610的非易失性存储器(NVM)/存储设备620、以及被耦合到系统控制模块610的一个或多个通信接口625。
在一些实施例中,系统600能够作为本申请中所述的设备。在一些实施例中,系统600可包括具有指令的一个或多个机器可读介质(例如,系统存储器或NVM/存储设备620)以及与该一个或多个机器可读介质耦合并被配置为执行指令以实现模块从而执行本申请实施例中所述的方法的一个或多个处理器(例如,(一个或多个)处理器605)。
对于一个实施例,系统控制模块610可包括任意适当的接口控制器,以向(一个或多个)处理器605中的至少一个和/或与系统控制模块610通信的任意适当的设备或组件提供任意适当的接口。
系统控制模块610可包括存储器控制器模块630,以向系统存储器615提供接口。存储器控制器模块630可以是硬件模块、软件模块和/或固件模块。
系统存储器615可被用于例如为系统600加载和存储数据和/或指令。对于一个实施例,系统存储器615可包括任意适当的易失性存储器,例如,适当的DRAM。在一些实施例中,系统存储器615可包括双倍数据速率类型四同步动态随机存取存储器(DDR4SDRAM)。
对于一个实施例,系统控制模块610可包括一个或多个输入/输出(I/O)控制器,以向NVM/存储设备620及(一个或多个)通信接口625提供接口。
例如,NVM/存储设备620可被用于存储数据和/或指令。NVM/存储设备620可包括任意适当的非易失性存储器(例如,闪存)和/或可包括任意适当的(一个或多个)非易失性存储设备(例如,一个或多个硬盘驱动器(HDD)、一个或多个光盘(CD)驱动器和/或一个或多个数字通用光盘(DVD)驱动器)。
NVM/存储设备620可包括在物理上作为系统600被安装在其上的设备的一部分的存储资源,或者其可被该设备访问而不必作为该设备的一部分。例如,NVM/存储设备620可通过网络经由(一个或多个)通信接口625进行访问。
(一个或多个)通信接口625可为系统600提供接口以通过一个或多个网络和/或与任意其他适当的设备通信。系统600可根据一个或多个无线网络标准和/或协议中的任意标准和/或协议来与无线网络的一个或多个组件进行无线通信。例如,(一个或多个)通信接口625可与以上针对图1所探讨的收发器模块140耦合。
对于一个实施例,(一个或多个)处理器605中的至少一个可与系统控制模块610的一个或多个控制器(例如,存储器控制器模块630)的逻辑封装在一起。对于一个实施例,(一个或多个)处理器605中的至少一个可与系统控制模块610的一个或多个控制器的逻辑封装在一起以形成系统级封装(SiP)。对于一个实施例,(一个或多个)处理器605中的至少一个可与系统控制模块610的一个或多个控制器的逻辑集成在同一模具上。对于一个实施例,(一个或多个)处理器605中的至少一个可与系统控制模块610的一个或多个控制器的逻辑集成在同一模具上以形成片上系统(SoC)。
在各个实施例中,系统600可以但不限于是:服务器、工作站、台式计算设备或移动计算设备(例如,膝上型计算设备、手持计算设备、平板电脑、上网本等)、路由器、无线接入点(AP)等。在各个实施例中,系统600可具有更多或更少的组件和/或不同的架构。例如,在一些实施例中,系统600包括一个或多个摄像机、键盘、液晶显示器(LCD)屏幕(包括触屏显示器)、非易失性存储器端口、多个天线、图形芯片、专用集成电路(ASIC)和扬声器等。
本申请实施例提供了方法和设备,示例1可包括一种设备,该设备包括:注入装置,用于在代码中注入关于类的标签字段,其中,在所述代码编译并运行后所生成的coredump文件中,所述类的对象包含所述字段标签。
示例2可包括示例1的设备,其中,该设备还包括:扫描装置,用于在生成coredump文件之后,根据所述标签字段在所述coredump文件的地址段中扫描对象,定位扫描到的对象。
示例3可包括示例2的设备,其中,所述标签字段包括可变字段和不可变字段,其中,所述可变字段包含所述对象的信息,所述不可变字段用于扫描coredump文件中包含的对象;
所述扫描装置,用于根据所述不可变字段,扫描coredump文件中包含的对象,确定包含对象的地址段;以及根据所述可变字段,扫描包含所述对象的地址段,定位所述对象。
示例4可包括示例3的设备,其中,所述可变字段包含对象的类标识;
所述扫描装置,用于根据所述可变字段中对象的类标识,扫描包含所述对象的地址段,确定扫描到的对象的类。
示例5可包括示例4的设备,其中,所述可变字段包含对象的类大小;
所述扫描装置,用于根据所述可变字段中对象的类大小,确定扫描的地址偏移量;以及在扫描完当前对象的标签字段的地址时,跳过所述地址偏移量,扫描下一对象对应的地址。
示例6可包括示例2-5的任一项设备,其中,所述扫描装置,还用于在根据所述标签字段在所述coredump文件的地址段中扫描对象之前,从所述代码编译的符号表中读取所述标签字段。
示例7可包括一种方法,该方法包括:
在代码中注入关于类的标签字段,其中,在所述代码编译并运行后所生成的coredump文件中,所述类的对象包含所述字段标签。
示例8可包括示例7的方法,其中,该方法还包括:
在生成coredump文件之后,根据所述标签字段在所述coredump文件的地址段中扫描对象,定位扫描到的对象。
示例9可包括示例8的方法,其中,所述标签字段包括可变字段和不可变字段,其中,所述可变字段包含所述对象的信息,所述不可变字段用于扫描coredump文件中包含的对象;
根据所述标签字段在所述coredump文件的地址段中扫描对象,定位扫描到的对象,包括:
根据所述不可变字段,扫描coredump文件中包含的对象,确定包含对象的地址段;
根据所述可变字段,扫描包含所述对象的地址段,定位所述对象。
示例10可包括示例9的方法,所述可变字段包含对象的类标识;
根据所述可变字段,扫描包含所述对象的地址段,定位所述对象,包括:
根据所述可变字段中对象的类标识,扫描包含所述对象的地址段,确定扫描到的对象的类。
示例11可包括示例10的方法,其中,所述可变字段还包含对象的类大小;
根据所述可变字段,扫描包含所述对象的地址段,包括:
根据所述可变字段中对象的类大小,确定扫描的地址偏移量;
在扫描完当前对象的标签字段的地址时,跳过所述地址偏移量,扫描下一对象对应的地址。
示例12可包括示例8-11的任一项方法,其中,根据所述标签字段在所述coredump文件的地址段中扫描对象之前,还包括:
从所述代码编译的符号表中读取所述标签字段。
示例13可包括一种设备,其中,该设备包括处理器和存储有机器可读指令的一个或多个机器可读介质,当所述处理器执行所述机器可读指令时,使得所述设备执行如示例7-12中任一项所述的方法。
需要注意的是,本申请可在软件和/或软件与硬件的组合体中被实施,例如,可采用专用集成电路(ASIC)、通用目的计算机或任何其他类似硬件设备来实现。在一个实施例中,本申请的软件程序可以通过处理器执行以实现上文步骤或功能。同样地,本申请的软件程序(包括相关的数据结构)可以被存储到计算机可读记录介质中,例如,RAM存储器,磁或光驱动器或软磁盘及类似设备。另外,本申请的一些步骤或功能可采用硬件来实现,例如,作为与处理器配合从而执行各个步骤或功能的电路。
另外,本申请的一部分可被应用为计算机程序产品,例如计算机程序指令,当其被计算机执行时,通过该计算机的操作,可以调用或提供根据本申请的方法和/或技术方案。而调用本申请的方法的程序指令,可能被存储在固定的或可移动的记录介质中,和/或通过广播或其他信号承载媒体中的数据流而被传输,和/或被存储在根据程序指令运行的计算机设备的工作存储器中。
对于本领域技术人员而言,显然本申请不限于上述示范性实施例的细节,而且在不背离本申请的精神或基本特征的情况下,能够以其他的具体形式实现本申请。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本申请的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本申请内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。装置权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。

Claims (13)

1.一种实现在coredump文件中定位对象的设备,其中,该设备包括:
注入装置,用于在代码中注入关于类的标签字段,其中,在所述代码编译并运行后所生成的coredump文件中,所述类的对象包含所述字段标签。
2.根据权利要求1所述的设备,其中,该设备还包括:
扫描装置,用于在生成coredump文件之后,根据所述标签字段在所述coredump文件的地址段中扫描对象,定位扫描到的对象。
3.根据权利要求2所述的设备,其中,所述标签字段包括可变字段和不可变字段,其中,所述可变字段包含所述对象的信息,所述不可变字段用于扫描coredump文件中包含的对象;
所述扫描装置,用于根据所述不可变字段,扫描coredump文件中包含的对象,确定包含对象的地址段;以及根据所述可变字段,扫描包含所述对象的地址段,定位所述对象。
4.根据权利要求3所述的设备,其中,所述可变字段包含对象的类标识;
所述扫描装置,用于根据所述可变字段中对象的类标识,扫描包含所述对象的地址段,确定扫描到的对象的类。
5.根据权利要求4所述的设备,其中,所述可变字段包含对象的类大小;
所述扫描装置,用于根据所述可变字段中对象的类大小,确定扫描的地址偏移量;以及在扫描完当前对象的标签字段的地址时,跳过所述地址偏移量,扫描下一对象对应的地址。
6.根据权利要求2至5中任一项所述的设备,其中,所述扫描装置,还用于在根据所述标签字段在所述coredump文件的地址段中扫描对象之前,从所述代码编译的符号表中读取所述标签字段。
7.一种实现在coredump文件中定位对象的方法,其中,该方法包括:
在代码中注入关于类的标签字段,其中,在所述代码编译并运行后所生成的coredump文件中,所述类的对象包含所述字段标签。
8.根据权利要求7所述的方法,其中,该方法还包括:
在生成coredump文件之后,根据所述标签字段在所述coredump文件的地址段中扫描对象,定位扫描到的对象。
9.根据权利要求8所述的方法,其中,所述标签字段包括可变字段和不可变字段,其中,所述可变字段包含所述对象的信息,所述不可变字段用于扫描coredump文件中包含的对象;
根据所述标签字段在所述coredump文件的地址段中扫描对象,定位扫描到的对象,包括:
根据所述不可变字段,扫描coredump文件中包含的对象,确定包含对象的地址段;
根据所述可变字段,扫描包含所述对象的地址段,定位所述对象。
10.根据权利要求9所述的方法,其中,所述可变字段包含对象的类标识;
根据所述可变字段,扫描包含所述对象的地址段,定位所述对象,包括:
根据所述可变字段中对象的类标识,扫描包含所述对象的地址段,确定扫描到的对象的类。
11.根据权利要求10所述的方法,其中,所述可变字段还包含对象的类大小;
根据所述可变字段,扫描包含所述对象的地址段,包括:
根据所述可变字段中对象的类大小,确定扫描的地址偏移量;
在扫描完当前对象的标签字段的地址时,跳过所述地址偏移量,扫描下一对象对应的地址。
12.根据权利要求8至11中任一项所述的方法,其中,根据所述标签字段在所述coredump文件的地址段中扫描对象之前,还包括:
从所述代码编译的符号表中读取所述标签字段。
13.一种实现在coredump文件中定位对象的设备,其中,该设备包括处理器和存储有机器可读指令的一个或多个机器可读介质,当所述处理器执行所述机器可读指令时,使得所述设备执行如权利要求7至12中任一项所述的方法。
CN201710322576.3A 2017-05-09 2017-05-09 实现在coredump文件中定位对象的方法及设备 Active CN108874448B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201710322576.3A CN108874448B (zh) 2017-05-09 2017-05-09 实现在coredump文件中定位对象的方法及设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201710322576.3A CN108874448B (zh) 2017-05-09 2017-05-09 实现在coredump文件中定位对象的方法及设备

Publications (2)

Publication Number Publication Date
CN108874448A CN108874448A (zh) 2018-11-23
CN108874448B true CN108874448B (zh) 2021-10-08

Family

ID=64287877

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201710322576.3A Active CN108874448B (zh) 2017-05-09 2017-05-09 实现在coredump文件中定位对象的方法及设备

Country Status (1)

Country Link
CN (1) CN108874448B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110928720A (zh) * 2020-02-10 2020-03-27 北京安博通科技股份有限公司 基于Linux系统的core dump文件生成方法及装置

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101526911A (zh) * 2009-03-26 2009-09-09 成都市华为赛门铁克科技有限公司 一种系统崩溃时系统信息存储方法及装置
CN103106132A (zh) * 2013-03-05 2013-05-15 中标软件有限公司 Linux系统崩溃时内核函数调用栈分析调试方法
CN103338384A (zh) * 2013-05-31 2013-10-02 优视科技有限公司 一种视频播放方法及装置
CN105183542A (zh) * 2015-08-13 2015-12-23 上海斐讯数据通信技术有限公司 一种内存管理方法及系统
US20170116096A1 (en) * 2015-10-22 2017-04-27 Netapp Inc. Preserving coredump data during switchover operation

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101526911A (zh) * 2009-03-26 2009-09-09 成都市华为赛门铁克科技有限公司 一种系统崩溃时系统信息存储方法及装置
CN103106132A (zh) * 2013-03-05 2013-05-15 中标软件有限公司 Linux系统崩溃时内核函数调用栈分析调试方法
CN103338384A (zh) * 2013-05-31 2013-10-02 优视科技有限公司 一种视频播放方法及装置
CN105183542A (zh) * 2015-08-13 2015-12-23 上海斐讯数据通信技术有限公司 一种内存管理方法及系统
US20170116096A1 (en) * 2015-10-22 2017-04-27 Netapp Inc. Preserving coredump data during switchover operation

Non-Patent Citations (4)

* Cited by examiner, † Cited by third party
Title
"Core file 文件格式(Linux Coredump文件结构)";_xiao;《https://blog.csdn.net/_xiao/article/details/22389997》;20140408;全文 *
"gdb调试coredump(使用篇)";僷枫_华;《https://blog.csdn.net/u014403008/article/details/54174109》;20170107;全文 *
"Linux内核崩溃转储机制的实现";朱辉;《中国优秀硕士学位论文全文数据库 信息科技辑》;20131215;I138-845,正文第1.3节,第2.3节 *
"可执行文件(ELF)格式的理解";LiuYanYGZ;《https://www.cnblogs.com/LiuYanYGZ/p/5574602.html》;20160611;全文 *

Also Published As

Publication number Publication date
CN108874448A (zh) 2018-11-23

Similar Documents

Publication Publication Date Title
CN107122296B (zh) 用于测试接口的数据断言的方法及设备
US8782617B2 (en) Apparatus and method for translating open vector graphic application program interface
WO2017166447A1 (zh) 内核模块加载方法和装置
CN110609679B (zh) 数据处理方法、装置、计算机可读存储介质和计算机设备
CN110727581B (zh) 崩溃定位方法与电子设备
CN107404418B (zh) 互联网产品测试方法、装置、设备及存储介质
CN113961919A (zh) 恶意软件检测方法和装置
CN105279006A (zh) 基于Android系统的屏幕截图方法及终端
CN110362547A (zh) 日志文件的编码、解析、存储方法和装置
CN110750440A (zh) 数据测试方法及终端设备
CN108874448B (zh) 实现在coredump文件中定位对象的方法及设备
CN107301220B (zh) 数据驱动视图的方法、装置、设备及存储介质
CN114816377A (zh) 脚本获取方法及装置
CN114816993A (zh) 一种全链路接口测试方法、系统、介质及电子设备
CN110609686A (zh) 数据系统生成方法、装置、计算机设备、存储介质
CN111177089B (zh) 日志处理代码的生成方法和装置、计算机系统和存储介质
US20130290377A1 (en) Populating data structures of software applications with input data provided according to extensible markup language (xml)
CN110968885A (zh) 模型训练数据存储方法及装置、电子设备、存储介质
US11846672B2 (en) Method and device for testing system-on-chip, electronic device using method, and computer readable storage medium
US20200286120A1 (en) Advertising monitoring method, system, apparatus, and electronic equipment
CN109189789B (zh) 一种用于显示表格的方法和装置
CN113535580A (zh) 一种cts测试方法、装置及测试设备
CN112130850A (zh) 应用程序中功能的实现方法和装置
CN111639030A (zh) 一种页面测试方法、装置、设备及存储介质
CN111522609A (zh) 一种页面的显示方法及装置

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant