CN117591327A - core文件生成方法、装置、电子设备及存储介质 - Google Patents
core文件生成方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN117591327A CN117591327A CN202311617975.4A CN202311617975A CN117591327A CN 117591327 A CN117591327 A CN 117591327A CN 202311617975 A CN202311617975 A CN 202311617975A CN 117591327 A CN117591327 A CN 117591327A
- Authority
- CN
- China
- Prior art keywords
- memory
- memory space
- dump
- mapping information
- target
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 172
- 230000008569 process Effects 0.000 claims abstract description 128
- 238000013507 mapping Methods 0.000 claims abstract description 86
- 238000004590 computer program Methods 0.000 claims description 7
- 238000004891 communication Methods 0.000 description 9
- 238000010586 diagram Methods 0.000 description 8
- 230000006870 function Effects 0.000 description 7
- 230000009471 action Effects 0.000 description 3
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000002159 abnormal effect Effects 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000001914 filtration Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000011664 signaling Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/0703—Error 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/0766—Error or fault reporting or storing
- G06F11/0778—Dumping, i.e. gathering error/state information after a fault for later diagnosis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/0703—Error 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/0766—Error or fault reporting or storing
- G06F11/0787—Storage of error reports, e.g. persistent data storage, storage using memory protection
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Quality & Reliability (AREA)
- Health & Medical Sciences (AREA)
- Biomedical Technology (AREA)
- Debugging And Monitoring (AREA)
Abstract
本申请提供一种core文件生成方法、装置、电子设备及存储介质,涉及计算机技术领域。该方法通过在检测到进程发生崩溃事件时,获取进程的内存映射信息,然后根据内存映射信息中的转储文件大小确定需要部分转储的目标内存空间,并选择将目标内存空间中的部分数据生成core文件,如此可根据配置的转储文件大小来灵活选择需要部分转储的内存空间,这样只需要将部分内存数据生成core文件,可减少硬盘资源的占用,且又可以避免完全不转储而无法对崩溃问题进行定位的问题。
Description
技术领域
本申请涉及计算机技术领域,具体而言,涉及一种core文件生成方法、装置、电子设备及存储介质。
背景技术
应用程序由于各种异常或者BUG导致在运行过程中异常退出或者中止,会产生一个叫做core的文件,通常情况下,core文件会包含了程序运行时的内存、寄存器状态、堆栈指针、内存管理信息还有各种函数调用堆栈信息等,可以理解为是程序工作当前工作状态存储生成的一个镜像文件,生成这个镜像文件的过程即称为core dump。通过工具分析这个文件,就可以定位到程序异常退出的时候对应的堆栈调用等信息,找出问题并及时解决。
core文件保存了程序运行时的所有内存数据,这会造成core文件非常大,导致需要占用大量的磁盘空间。
发明内容
本申请实施例的目的在于提供一种core文件生成方法、装置、电子设备及存储介质,用以改善现有技术中将内存数据全部生成core文件导致需要占用大量磁盘空间的问题。
第一方面,本申请实施例提供了一种core文件生成方法,所述方法包括:
当检测到进程发生崩溃事件时,获取所述进程的内存映射信息,所述内存映射信息包括所述进程对应的内存空间与转储文件大小的映射信息;
根据所述内存映射信息中的转储文件大小确定需要部分转储的目标内存空间;
选择将所述目标内存空间中的部分数据生成core文件。
在上述实现过程中,通过在检测到进程发生崩溃事件时,获取进程的内存映射信息,然后根据内存映射信息中的转储文件大小确定需要部分转储的目标内存空间,并选择将目标内存空间中的部分数据生成core文件,如此可根据配置的转储文件大小来灵活选择需要部分转储的内存空间,这样只需要将部分内存数据生成core文件,可减少硬盘资源的占用,且又可以避免完全不转储而无法对崩溃问题进行定位的问题。
可选地,所述根据所述内存映射信息中的转储文件大小确定需要部分转储的目标内存空间,包括:
根据所述内存映射信息确定转储文件大小为0对应的内存空间,并确定该内存空间为需要部分转储的目标内存空间。
在上述实现过程中,将转储文件大小为0的内存空间确定为需要部分转储的目标内存空间,这样可以将原本不需要转储的内存空间的部分数据进行转储,从而可以有利于对进程崩溃事件进行分析定位。
可选地,所述根据所述内存映射信息确定转储文件大小为0对应的内存空间,并确定该内存空间为需要部分转储的目标内存空间,包括:
获取所述进程当前访问的内存地址;
根据所述内存映射信息确定转储文件大小为0对应的内存空间;
判断所述内存空间是否包含所述内存地址;
若是,则确定所述内存空间为需要部分转储的目标内存空间。
在上述实现过程中,在内存空间包含进程当前访问的内存地址时,才对内存空间的部分数据进行转储,这样可以避免转储的数据是对进程的崩溃事件分析定位无用的数据。
可选地,所述获取所述进程当前访问的内存地址,包括:
获取所述进程的寄存器中的地址信息;
和/或,对所述进程的栈内存进行栈回溯,查找所述栈内存中的变量地址以及寄存器地址;
和/或,查找所述栈内存中变量所引用的内存地址。
在上述实现过程中,通过上述方式可以获取到更多、更全面的进程当前访问的内存地址,从而可将这些内存地址的数据进行转储,有利于对进程的崩溃事件进行分析定位。
可选地,所述确定所述内存空间为需要部分转储的目标内存空间,包括:
判断所述内存空间的类型是否为共享内存;
若是,则确定所述内存空间为需要部分转储的目标内存空间。
在上述实现过程中,由于共享内存存储的数据一般比较大,所以针对共享内存只转储部分数据,可以减少生成的core文件所占用的存储资源。
可选地,所述选择将所述目标内存空间中的部分数据生成core文件,包括:
将所述目标内存空间划分为多个子空间;
选择将所述多个子空间中的至少一个子空间中的数据生成core文件。
在上述实现过程中,将目标内存空间划分为多个子空间,这样可以灵活选择需要转储的子空间。
可选地,所述选择将所述多个子空间中的至少一个子空间中的数据生成core文件,包括:
选择将所述多个子空间中的至少一个子空间对应的内存映射信息存储到目标数组中,所述目标数组中还包括所述进程的内存映射信息;
根据所述目标数组生成core文件。
在上述实现过程中,将内存映射信息存储到目标数组中,这样目标数组中存储的是需要进行转储的内存空间的内存映射信息,进而便于将这些数据转储为core文件。
第二方面,本申请实施例提供了一种core文件生成装置,所述装置包括:
信息获取模块,用于当检测到进程发生崩溃事件时,获取所述进程的内存映射信息,所述内存映射信息包括所述进程对应的内存空间与转储文件大小的映射信息;
转储确定模块,用于根据所述内存映射信息中的转储文件大小确定需要部分转储的目标内存空间;
文件生成模块,用于选择将所述目标内存空间中的部分数据生成core文件。
第三方面,本申请实施例提供一种电子设备,包括处理器以及存储器,所述存储器存储有计算机可读取指令,当所述计算机可读取指令由所述处理器执行时,运行如上述第一方面提供的所述方法中的步骤。
第四方面,本申请实施例提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时运行如上述第一方面提供的所述方法中的步骤。
本申请的其他特征和优点将在随后的说明书阐述,并且,部分地从说明书中变得显而易见,或者通过实施本申请实施例了解。本申请的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对本申请实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1为本申请实施例提供的一种core文件生成方法的流程图;
图2为本申请实施例提供的一种内存映射信息的示意图;
图3为本申请实施例提供的一种内存空间拆分后的示意图;
图4为本申请实施例提供的一种将内存空间拆分后的内存映射信息示意图;
图5为本申请实施例提供的一种core文件生成装置的结构框图;
图6为本申请实施例提供的一种用于执行core文件生成方法的电子设备的结构示意图。
具体实施方式
下面将结合本申请实施例中附图,对本申请实施例中的技术方案进行清楚、完整地描述。
需要说明的是,本发明实施例中的术语“系统”和“网络”可被互换使用。“多个”是指两个或两个以上,鉴于此,本发明实施例中也可以将“多个”理解为“至少两个”。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,字符“/”,如无特殊说明,一般表示前后关联对象是一种“或”的关系。
本申请实施例提供一种core文件生成方法,该方法通过在检测到进程发生崩溃事件时,获取进程的内存映射信息,然后根据内存映射信息中的转储文件大小确定需要部分转储的目标内存空间,并选择将目标内存空间中的部分数据生成core文件,如此可根据配置的转储文件大小来灵活选择需要部分转储的内存空间,这样只需要将部分内存数据生成core文件,可减少硬盘资源的占用,且又可以避免完全不转储而无法对崩溃问题进行定位的问题。
请参照图1,图1为本申请实施例提供的一种core文件生成方法的流程图,该方法包括如下步骤:
步骤S110:当检测到进程发生崩溃事件时,获取进程的内存映射信息。
系统在检测到崩溃事件时,首先检测到的应该是程序产生的崩溃事件,然后可以先确定崩溃事件对应的进程,比如当程序发送异常故障等信息时,对应进程即有可能会发生crash,crash就是指程序发生异常时导致的进程崩溃事件,通常在某进程发生crash时,进程会收到以下几种信号:SIGQUIT、SIQILL、SIGTARP、SIGABRT、SIGBUS或SIGFPE。在进程发生crash时,系统会产生基于该进程的tombstone文件。其中,tombstone文件中只会记录该进程的简要信息,包括发生问题时候各个寄存器值以及附近memory里的信息,还记录了该进程栈里面各帧的简要信息。所以通过查找tombstone文件,即可以确定崩溃事件对应的进程。
其中,在确定进程发生崩溃事件后,可以获取进程的内存映射信息,内存映射信息包括进程对应的内存空间与转储文件大小的映射信息。这里的内存空间可以理解为是进程对应的地址空间,转储文件大小可以理解为是dump core文件的大小,比如,一些内存空间的转储文件大小要么是其内存空间的大小,要么就是0,0就是表示不对该内存空间的数据进行转储,如果转储文件大小就是内存空间的大小,那么就表示可以将该内存空间的全部数据进行转储。目前在配置内存映射信息时均按照这种映射关系进行配置,即要么全部转储,要么全部不转储。
可以理解地,在一些实施方式中,在配置内存映射信息中的转储文件大小时,也可以根据需求来配置,比如对于某个内存空间,其对应的转储文件大小可以小于该内存空间的大小,这种情况下即表示可以将该内存空间中的部分数据进行转储,而不是全部数据进行转储。
内存映射信息可以是预先配置好并存储下来的,并跟各个进程的标识进行存储,这样在获取进程的内存映射信息时,可以通过该进程的标识来查找获得对应的内存映射信息。或者也可以通过调用do_coredump流程,do_coredump函数会遍历进程所有的内存映射,并根据转储掩码来决定转储这块内存的大小。比如某个内存空间的转储掩码没打开,其则对应的转储文件大小即为0,如果其转储掩码打开,则其对应的转储文件大小即为该内存空间的大小,如图2所示,其中1234即表示该私有内存的转储文件大小,0表示其共享内存的转储文件大小为0,即不能进行转储。
当然,对应的内存映射信息也可以根据相关技术中的获取方式来获得,在此不详细赘述。
步骤S120:根据内存映射信息中的转储文件大小确定需要部分转储的目标内存空间。
如果转储文件大小可以根据需求灵活配置的话,那么这里在确定目标内存空间时,可以是指内存映射信息中转储文件大小小于其对应内存空间大小的内存空间,然后可将这些内存空间确定为需要部分转储的目标内存空间。
可以理解地,目标内存空间的确定方式也可以灵活配置,比如也可以将转储文件大小大于预设阈值的内存空间确定为需要部分转储的目标内存空间,因为这些内存空间需要转储的文件大小可能较大,会占用较多的存储空间,所以可以将这些内存空间中的数据进行部分转储。
步骤S130:选择将目标内存空间中的部分数据生成core文件。
在上述确定目标内存空间后,可选择将目标内存空间中的部分数据生成core文件,这里的部分数据可以是指目标内存空间中部分内存地址对应的数据,可以灵活选择定义。
core文件的数据结构可包括以下几个部分:
1)elf header:是指core文件的文件头,其用于记录一些头部数据,也即本公开下文所述的文件头数据。例如,文件头数据中记录有core文件所有Segment(段)的数量,也即Note段和Load段的总数量。
2)Program headers:是指core文件的程序头部数据,其用于记录Note段头数据和各个Load段头数据。
3)PT_Note Segment:是用于保存线程状态信息(Thread Status)、寄存器信息(Registers)的Segment(段),也即Note段数据。
4)PT_Load Segment:是用于保存进程已映射的内存段和代码段,也即Load段数据。
生成core文件的过程,即可以理解为:从部分数据中提取并生成上述各部分数据代码,并依次写入目标文件,得到core文件的过程。
而具体将数据生成core文件的详细实现过程可以参照相关技术中的实现方式,在此不详细赘述。
在上述实现过程中,通过在检测到进程发生崩溃事件时,获取进程的内存映射信息,然后根据内存映射信息中的转储文件大小确定需要部分转储的目标内存空间,并选择将目标内存空间中的部分数据生成core文件,如此可根据配置的转储文件大小来灵活选择需要部分转储的内存空间,这样只需要将部分内存数据生成core文件,可减少硬盘资源的占用,且又可以避免完全不转储而无法对崩溃问题进行定位的问题。
在上述实施例的基础上,在上述确定目标内存空间的方式中,还可以根据内存映射信息确定转储文件大小为0对应的内存空间,并确定该内存空间为需要部分转储的目标内存空间。
如果不改变常规配置方式,常规配置方式下会针对某些比较大的内存空间,直接将转储文件大小配置为0,表示该内存空间的数据不转储,要么是对内存数据全部转储,即转储文件大小是内存空间的大小。而对于不转储的内存空间,主要是考虑到这些内存空间太大,转储成core文件是占用较多存储资源,但是如果不转储,则无法进行问题定位,所以针对这些内存空间,本方案中可以单独对其进行部分转储,而不是不转储或全部转储,这样既能实现问题定位又可以减少存储资源的占用。
在上述实现过程中,将转储文件大小为0的内存空间确定为需要部分转储的目标内存空间,这样可以将原本不需要转储的内存空间的部分数据进行转储,从而可以有利于对进程崩溃事件进行分析定位。
在上述实施例的基础上,在上述确定目标内存空间的方式中,还可以先获取进程当前访问的内存地址,然后根据内存映射信息确定转储文件大小为0对应的内存空间,判断该内存空间是否包含其内存地址,若是,则确定内存空间为需要部分转储的目标内存空间。
其中,进程当前访问的内存地址是指进程在发生崩溃事件之前所访问的内存地址,也可以理解为是进程运行时所调用的内存空间,其可以通过系统中相关文件中记录的信息得到。
为了确保本次进程崩溃后,能够对进程当前访问的内存地址对应的数据进行转储,所以在根据内存映射信息中确定转储文件大小为0的内存空间后,还可以判断内存空间是否包含其内存地址。比如获取到进程当前访问的多个内存地址,若其中转储文件大小为0的内存空间包含其中至少一个内存地址,那么就认为该内存空间是需要部分转储的目标内存空间,当然如果该内存空间不包含其中至少一个内存地址,则表示当前不需要对该内存空间的数据进行转储,即该内存空间的转储可走原有的转储逻辑,即全部不转储。
在上述实现过程中,在内存空间包含进程当前访问的内存地址时,才对内存空间的部分数据进行转储,这样可以避免转储的数据是对进程的崩溃事件分析定位无用的数据。
在上述实施例的基础上,上述获取进程当前访问的内存地址的方式中,可以包括:获取进程的寄存器中的地址信息;和/或,对进程的栈内存进行栈回溯,查找栈内存中的变量地址以及寄存器地址;和/或,查找栈内存中变量所引用的内存地址。
其中,寄存器是系统中的存储单元,当进程在运行时,其代码和数据一般会被加载到内存中,同时寄存器会包含指向这些内存地址的指针,所以通过查找这些寄存器,可以获取寄存器中的地址信息。
栈是进程中用于存储局部变量和函数/方法调用信息的区域,当一个函数被调用时,会创建一个新的栈帧,其中包含函数的局部变量、参数和返回地址。所以通过分析栈内存,可以查找这些栈帧中的变量地址以及寄存器地址,这些地址均可以作为进程当前访问的内存地址。
如果一个变量引用了其他内存地址,那么这个引用通常会在帧内存中以指针的形式存在,这样通过分析这些指针,可以找到被引用的内存地址,这些地址同样也可作为进程当前访问的内存地址。
在上述实现过程中,通过上述方式可以获取到更多、更全面的进程当前访问的内存地址,从而可将这些内存地址的数据进行转储,有利于对进程的崩溃事件进行分析定位。
在上述实施例的基础上,在上述确定目标内存空间的方式中,还可以判断内存空间的类型是否为共享内存,若是,则确定内存空间为需要部分转储的目标内存空间。
这里的内存空间可以是指内存映射信息中的内存空间,通过判断这些内容空间的类型来选择需要部分转储的目标内存空间,比如直接将共享内存作为目标内存空间。或者,这里的内存空间也可以是指上述转储文件大小为0对应的内存空间,若该内存空间的类型是共享内存,则认为其是目标内存空间。
其中,共享内存,就是指允许两个不相关的进程访问同一个逻辑内存,共享内存是两个正在运行的进程之间共享和传递数据的一种非常有效的方式。不同进程之间共享的内存通常为同一段物理内存,进程可以将同一段物理内存连接到他们自己的地址空间中,所有的进程都可以访问共享内存中的地址,如果某个进程向共享内存写入数据,所做的改动将立即影响到可以访问同一段共享内存的任何其他进程。
由于共享内存可供多个进程使用,所以其存储的数据量较大,而一般对于共享内存的数据不会进行转储,以免占用较多存储资源,所以对于共享内存,则可以对其数据进行部分转储,如此可减少存储资源的占用。
在上述实现过程中,由于共享内存存储的数据一般比较大,所以针对共享内存只转储部分数据,可以减少生成的core文件所占用的存储资源。
在上述实施例的基础上,在将目标内存空间中的部分数据生成core文件的方式中,可以将目标内存空间划分为多个子空间,然后选择将多个子空间中的至少一个子空间中的数据生成core文件。
如图3所示,其示出了将目标内存空间划分为3个子空间的示意图,这里将第二个子空间的数据进行转储,其转储文件大小即为第二个子空间的大小,将目标内存空间进行划分后,即可为划分的多个子空间配置对应的转储文件大小,比如不需要转储的子空间,其对应的转储文件大小可以配置为0,这样在生成core文件时,可根据转储文件大小来进行转储。在拆分后,其转储文件大小和内存空间的映射可以是多对一的关系,如图4所示。
可以理解地,图3中只是一种划分示例,在实际应用中,可以根据实际需求灵活划分。
在一些实施方式中,这里将目标内存空间进行划分时,可以先将目标内存空间中所包含的进程当前访问的内存地址划分出来作为一个子空间,比如进程当前访问的内存地址包括xx1,那么就在目标内存空间中将xx1这一空间划分出来作为子空间,并为其分配相应的转储文件大小,而剩余的内存空间则可根据需求划分即可,剩余的内存空间对应的转储文件大小可配置为0,这样可以确保能够将进程当前访问的内存地址的数据转储为core文件,进而后续有利于对进程的崩溃事件进行分析定位。
在上述实现过程中,将目标内存空间划分为多个子空间,这样可以灵活选择需要转储的子空间。
在上述实施例的基础上,上述在将至少一个子空间中的数据生成core文件的方式中,可以选择将多个子空间中的至少一个子空间对应的内存映射信息存储到目标数组中,该目标数组中还包括进程的内存映射信息,然后根据目标数组生成core文件。
在该实现方式中,在上述获取到进程当前访问的内存地址后,可将这些内存地址放在一个数组中,该数组可命名为filter_pointers。然后从内存映射信息中获取内存映射个数,按照内存映射个数创建一个数组,命名为vma_files,即目标数组,该vma_files数组可用于存放进程已有和拆分后的内存映射信息。
然后通过查找内存映射信息,在返回转储文件大小(可称为dump)为0的场景下,可再利用filter_pointers数组中的数据进行过滤,比如可判断转储文件大小为0的内存空间是否包含filter_pointers数组中的数据,如果包含,则认为其内存空间为目标内存空间,然后再将目标内存空间进行拆分,拆分后的子空间及其映射的转储文件大小可添加到vma_files数组中。
然后进行生成core文件的过程,先写elf note信息,elf note是一种特殊的数据结果,用于在core文件中存储额外的信息,如进程的状态,寄存器值等,在生成core文件时,首先获取哪些信息需要保存在elf note信息中,然后将获取的信息填充到elf note数据结构中,然后再将其写入到core文件中,其通常可以通过调用特定的系统调用来完成,在写入elf note后,需要更新core文件的头部信息,以便能够正确的解析和定位elf note,比如可能涉及到更新文件头部的偏移量、大小或其他字段等。可以理解地,具体写elf note信息的过程可以参照相关技术中的实现过程,在此不详细赘述。
然后修改内核原生写elf header信息的循环逻辑,之前是循环进程的内存映射,这里改为循环vma_files数组,即循环该vma_files数组中存储的内存映射信息,并将相关信息写入core文件。
其中,elf header是core文件的最顶层结果,用于描述整个文件的属性和布局,在写elf header信息时,需要先创建一个适当的数据结构来存储elf header的信息,通常涉及到定义文件类型、文件字节序、段头数量等,将获取的文件信息填充到elf header数据结构中,比如程序入口点地址、段头表位置等字段信息,然后可将elf header信息写入到core文件中。
然后再修改内核原生写内存信息的循环逻辑,之前是循环进程的内存映射,改完循环vma_files数组,通过vma_files数组中记录的内存映射、内存起始地址、大小等信息写入core文件,如此可实现根据vma_files数组将内存空间中的数据生成core文件的过程。
在上述实现过程中,将内存映射信息存储到目标数组中,这样目标数组中存储的是需要进行转储的内存空间的内存映射信息,进而便于将这些数据转储为core文件。
请参照图5,图5为本申请实施例提供的一种core文件生成装置200的结构框图,该装置200可以是电子设备上的模块、程序段或代码。应理解,该装置200与上述图1方法实施例对应,能够执行图1方法实施例涉及的各个步骤,该装置200具体的功能可以参见上文中的描述,为避免重复,此处适当省略详细描述。
可选地,所述装置200包括:
信息获取模块210,用于当检测到进程发生崩溃事件时,获取所述进程的内存映射信息,所述内存映射信息包括所述进程对应的内存空间与转储文件大小的映射信息;
转储确定模块220,用于根据所述内存映射信息中的转储文件大小确定需要部分转储的目标内存空间;
文件生成模块230,用于选择将所述目标内存空间中的部分数据生成core文件。
可选地,所述转储确定模块220,用于根据所述内存映射信息确定转储文件大小为0对应的内存空间,并确定该内存空间为需要部分转储的目标内存空间。
可选地,所述转储确定模块220,用于获取所述进程当前访问的内存地址;根据所述内存映射信息确定转储文件大小为0对应的内存空间;判断所述内存空间是否包含所述内存地址;若是,则确定所述内存空间为需要部分转储的目标内存空间。
可选地,所述转储确定模块220,用于获取所述进程的寄存器中的地址信息;和/或,对所述进程的栈内存进行栈回溯,查找所述栈内存中的变量地址以及寄存器地址;和/或,查找所述栈内存中变量所引用的内存地址。
可选地,所述转储确定模块220,用于判断所述内存空间的类型是否为共享内存;若是,则确定所述内存空间为需要部分转储的目标内存空间。
可选地,所述文件生成模块230,用于将所述目标内存空间划分为多个子空间;选择将所述多个子空间中的至少一个子空间中的数据生成core文件。
可选地,所述文件生成模块230,用于选择将所述多个子空间中的至少一个子空间对应的内存映射信息存储到目标数组中,所述目标数组中还包括所述进程的内存映射信息;根据所述目标数组生成core文件。
需要说明的是,本领域技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再重复描述。
请参照图6,图6为本申请实施例提供的一种用于执行core文件生成方法的电子设备的结构示意图,所述电子设备可以包括:至少一个处理器310,例如CPU,至少一个通信接口320,至少一个存储器330和至少一个通信总线340。其中,通信总线340用于实现这些组件之间的连接通信。其中,本申请实施例中设备的通信接口320用于与其他节点设备进行信令或数据的通信。存储器330可以是高速RAM存储器,也可以是非易失性的存储器(non-volatile memory),例如至少一个磁盘存储器。存储器330可选的还可以是至少一个位于远离前述处理器的存储装置。存储器330中存储有计算机可读取指令,当所述计算机可读取指令由所述处理器310执行时,电子设备执行上述图1所示方法过程。
可以理解,图6所示的结构仅为示意,所述电子设备还可包括比图6中所示更多或者更少的组件,或者具有与图6所示不同的配置。图6中所示的各组件可以采用硬件、软件或其组合实现。
本申请实施例提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时,执行如图1所示方法实施例中电子设备所执行的方法过程。
本实施例公开一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法实施例所提供的方法,例如,包括:
当检测到进程发生崩溃事件时,获取所述进程的内存映射信息,所述内存映射信息包括所述进程对应的内存空间与转储文件大小的映射信息;
根据所述内存映射信息中的转储文件大小确定需要部分转储的目标内存空间;
选择将所述目标内存空间中的部分数据生成core文件。
综上所述,本申请实施例提供一种core文件生成方法、装置、电子设备及存储介质,该方法通过在检测到进程发生崩溃事件时,获取进程的内存映射信息,然后根据内存映射信息中的转储文件大小确定需要部分转储的目标内存空间,并选择将目标内存空间中的部分数据生成core文件,如此可根据配置的转储文件大小来灵活选择需要部分转储的内存空间,这样只需要将部分内存数据生成core文件,可减少硬盘资源的占用,且又可以避免完全不转储而无法对崩溃问题进行定位的问题。
在本申请所提供的实施例中,应该理解到,所揭露装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
另外,作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
再者,在本申请各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。
以上所述仅为本申请的实施例而已,并不用于限制本申请的保护范围,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (10)
1.一种core文件生成方法,其特征在于,所述方法包括:
当检测到进程发生崩溃事件时,获取所述进程的内存映射信息,所述内存映射信息包括所述进程对应的内存空间与转储文件大小的映射信息;
根据所述内存映射信息中的转储文件大小确定需要部分转储的目标内存空间;
选择将所述目标内存空间中的部分数据生成core文件。
2.根据权利要求1所述的方法,其特征在于,所述根据所述内存映射信息中的转储文件大小确定需要部分转储的目标内存空间,包括:
根据所述内存映射信息确定转储文件大小为0对应的内存空间,并确定该内存空间为需要部分转储的目标内存空间。
3.根据权利要求2所述的方法,其特征在于,所述根据所述内存映射信息确定转储文件大小为0对应的内存空间,并确定该内存空间为需要部分转储的目标内存空间,包括:
获取所述进程当前访问的内存地址;
根据所述内存映射信息确定转储文件大小为0对应的内存空间;
判断所述内存空间是否包含所述内存地址;
若是,则确定所述内存空间为需要部分转储的目标内存空间。
4.根据权利要求3所述的方法,其特征在于,所述获取所述进程当前访问的内存地址,包括:
获取所述进程的寄存器中的地址信息;
和/或,对所述进程的栈内存进行栈回溯,查找所述栈内存中的变量地址以及寄存器地址;
和/或,查找所述栈内存中变量所引用的内存地址。
5.根据权利要求3所述的方法,其特征在于,所述确定所述内存空间为需要部分转储的目标内存空间,包括:
判断所述内存空间的类型是否为共享内存;
若是,则确定所述内存空间为需要部分转储的目标内存空间。
6.根据权利要求1所述的方法,其特征在于,所述选择将所述目标内存空间中的部分数据生成core文件,包括:
将所述目标内存空间划分为多个子空间;
选择将所述多个子空间中的至少一个子空间中的数据生成core文件。
7.根据权利要求6所述的方法,其特征在于,所述选择将所述多个子空间中的至少一个子空间中的数据生成core文件,包括:
选择将所述多个子空间中的至少一个子空间对应的内存映射信息存储到目标数组中,所述目标数组中还包括所述进程的内存映射信息;
根据所述目标数组生成core文件。
8.一种core文件生成装置,其特征在于,所述装置包括:
信息获取模块,用于当检测到进程发生崩溃事件时,获取所述进程的内存映射信息,所述内存映射信息包括所述进程对应的内存空间与转储文件大小的映射信息;
转储确定模块,用于根据所述内存映射信息中的转储文件大小确定需要部分转储的目标内存空间;
文件生成模块,用于选择将所述目标内存空间中的部分数据生成core文件。
9.一种电子设备,其特征在于,包括处理器以及存储器,所述存储器存储有计算机可读取指令,当所述计算机可读取指令由所述处理器执行时,运行如权利要求1-7任一所述的方法。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时运行如权利要求1-7任一所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311617975.4A CN117591327A (zh) | 2023-11-29 | 2023-11-29 | core文件生成方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311617975.4A CN117591327A (zh) | 2023-11-29 | 2023-11-29 | core文件生成方法、装置、电子设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117591327A true CN117591327A (zh) | 2024-02-23 |
Family
ID=89917986
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311617975.4A Pending CN117591327A (zh) | 2023-11-29 | 2023-11-29 | core文件生成方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117591327A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN118394718A (zh) * | 2024-06-26 | 2024-07-26 | 杭州海康威视数字技术股份有限公司 | 一种文件生成方法、装置、电子设备及存储介质 |
-
2023
- 2023-11-29 CN CN202311617975.4A patent/CN117591327A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN118394718A (zh) * | 2024-06-26 | 2024-07-26 | 杭州海康威视数字技术股份有限公司 | 一种文件生成方法、装置、电子设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110413521B (zh) | 一种堆内存的写越界检测方法和装置 | |
CN109788068B (zh) | 心跳状态信息上报方法、装置和设备及计算机存储介质 | |
CN112199240B (zh) | 一种节点故障时进行节点切换的方法及相关设备 | |
CN117591327A (zh) | core文件生成方法、装置、电子设备及存储介质 | |
US20220214907A1 (en) | Virtual machine memory management method and device | |
CN112667405B (zh) | 信息处理方法、装置、设备及存储介质 | |
CN103412822A (zh) | 操作非易失性内存和数据操作的方法和相关装置 | |
CN111522659B (zh) | 一种空间使用方法和装置 | |
CN104216771A (zh) | 软件程序的重启方法及装置 | |
CN115712394A (zh) | 数据读写方法、装置、计算机设备及可读存储介质 | |
CN110399168A (zh) | 多数据盘存储服务器的系统启动方法、装置及设备 | |
EP2645249A1 (en) | Information processing apparatus, and method of controlling information processing apparatus | |
CN117785440A (zh) | 异常进程处理方法和相关装置、设备、存储介质 | |
CN112199042A (zh) | 存储空间管理方法、装置、芯片、设备及存储介质 | |
US20070234114A1 (en) | Method, apparatus, and computer program product for implementing enhanced performance of a computer system with partially degraded hardware | |
CN109032762B (zh) | 虚拟机回溯方法及相关设备 | |
CN113220495B (zh) | 一种进程异常事件处理方法、装置、电子设备及存储介质 | |
CN116150111A (zh) | 内核崩溃日志的保存方法、装置、介质以及电子设备 | |
CN109710187A (zh) | NVMe SSD主控芯片的读命令加速方法、装置、计算机设备及存储介质 | |
CN115509741A (zh) | 一种内存管理系统、越界检测方法及存储介质 | |
CN110716814B (zh) | 一种进程间大数据量通讯的性能优化方法和装置 | |
CN113468020A (zh) | 内存监控方法、装置、电子设备及计算机可读存储介质 | |
CN111602121B (zh) | 利用所应用的存储器区域生命期的比特精确跟踪分析 | |
CN108874560B (zh) | 进行通信的方法和通信设备 | |
CN113157513B (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 |