CN117435385A - 一种日志记录方法、装置及电子设备和存储介质 - Google Patents
一种日志记录方法、装置及电子设备和存储介质 Download PDFInfo
- Publication number
- CN117435385A CN117435385A CN202311756821.3A CN202311756821A CN117435385A CN 117435385 A CN117435385 A CN 117435385A CN 202311756821 A CN202311756821 A CN 202311756821A CN 117435385 A CN117435385 A CN 117435385A
- Authority
- CN
- China
- Prior art keywords
- memory
- function
- thread
- calling relation
- record
- 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.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 76
- 230000006870 function Effects 0.000 claims abstract description 322
- 230000002159 abnormal effect Effects 0.000 claims description 10
- 238000004590 computer program Methods 0.000 claims description 10
- 230000001360 synchronised effect Effects 0.000 description 9
- 238000010586 diagram Methods 0.000 description 7
- 230000005291 magnetic effect Effects 0.000 description 6
- 230000003287 optical effect Effects 0.000 description 4
- 230000003068 static effect Effects 0.000 description 4
- 230000006399 behavior Effects 0.000 description 3
- 238000004891 communication Methods 0.000 description 3
- 239000004744 fabric Substances 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 238000006467 substitution reaction Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000005294 ferromagnetic effect Effects 0.000 description 1
- 230000008571 general function Effects 0.000 description 1
- 230000006386 memory function 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
-
- 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/079—Root cause analysis, i.e. error or fault diagnosis
-
- 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)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Health & Medical Sciences (AREA)
- Biomedical Technology (AREA)
- Debugging And Monitoring (AREA)
Abstract
本申请公开了一种日志记录方法、装置及电子设备和存储介质,涉及计算机技术领域,应用于存储系统,该方法包括:根据内存操作函数调用关系创建树形模型;内存操作函数调用关系包括多级业务函数之间的调用关系、业务函数与缓存区接口函数之间的调用关系、缓存区接口函数与内存页接口函数之间的调用关系;在树形模型中的每个节点中添加日志记录代码;当运行到日志记录代码时,将节点对应的函数的关键字段写入内存,以在内存中生成日志;当检测到内存页错误时,从内存中获取记录的关键字段,以获取内存操作函数调用关系和操作信息并定位错误。本申请实现了存储系统的日志记录和内存错误定位。
Description
技术领域
本申请涉及计算机技术领域,更具体地说,涉及一种日志记录方法、装置及电子设备和存储介质。
背景技术
在相关技术中,定位内存错误的日志工具是将应用程序的内存分配器和内存池都由日志系统接管,也即记录操作系统的内存资源。但是,存储系统由于自建内存池管理内存页,定位的是自建内存池中内存页的错误,相关技术中的日志工具无法应用于存储产品的内存错误定位。
因此,如何实现存储系统的日志记录是本领域技术人员需要解决的技术问题。
发明内容
本申请的目的在于提供一种日志记录方法、装置及电子设备和存储介质,实现了存储系统的日志记录。
为实现上述目的,本申请提供了一种日志记录方法,应用于存储系统,所述方法包括:
根据内存操作函数调用关系创建树形模型;其中,所述内存操作函数调用关系包括多级业务函数之间的调用关系、业务函数与缓存区接口函数之间的调用关系、缓存区接口函数与内存页接口函数之间的调用关系,所述树形模型中的每个节点对应一个函数;
在所述树形模型中的每个节点中添加日志记录代码;其中,所述日志记录代码用于记录所述节点对应的函数的关键字段,所述关键字段用于描述所述树形模型的结构和记录操作信息;
当运行到所述日志记录代码时,将所述节点对应的函数的关键字段写入内存,以在所述内存中生成日志;
当检测到内存页错误时,从所述内存中获取记录的关键字段,以获取内存操作函数调用关系和操作信息并定位错误。
其中,将所述节点对应的函数的关键字段写入内存之前,还包括:
在所述内存中申请内存空间,所述内存空间用于记录所述关键字段。
其中,在所述内存中申请内存空间之后,还包括:
在所述内存空间中创建循环队列,所述循环队列用于记录所述关键字段。
其中,在所述内存空间中创建循环队列,包括:
在所述内存空间中为每个线程创建对应的循环队列,所述循环队列用于记录所述线程调用的函数的关键字段。
其中,将所述节点对应的函数的关键字段写入内存,包括:
确定所述节点对应的函数对应的线程,将所述函数的关键字段写入所述线程对应的循环队列中。
其中,将所述函数的关键字段写入所述线程对应的循环队列中,包括:
判断所述线程对应的循环队列是否已满;
若否,则将所述函数的关键字段写入所述循环队列中第一个不为空的位置。
其中,所述判断所述线程对应的循环队列是否已满之后,还包括:
当所述线程对应的循环队列已满时,将所述函数的关键字段写入所述循环队列中最早写入数据的位置。
其中,所述判断所述线程对应的循环队列是否已满,包括:
判断所述线程对应的循环队列是否满足预设条件;若是,则判定所述循环队列已满;其中,所述预设条件为:(rear+1)%maxSize=front,front为所述循环队列中第一个元素的位置,rear为所述循环队列中最后一个元素的后一个位置,maxSize为所述循环队列的位置总数,%为取余操作。
其中,从所述内存中获取记录的关键字段,以获取内存操作函数调用关系和操作信息并定位错误,包括:
从所述内存中获取每个所述线程记录的关键字段,以获取每个线程的内存操作函数调用关系和操作信息并定位错误。
其中,所述关键字段包括当前函数名、函数位置、上级函数名、访问起始地址、访问长度、访问类型中任一项或任几项的组合,所述当前函数名、所述函数位置、所述上级函数名用于描述所述树形模型的结构,所述访问起始地址、所述访问长度、所述访问类型用于记录操作信息。
其中,在所述内存中生成日志之后,还包括:
在所述日志的代码中添加二进制结构化浏览工具的代码,所述二进制结构化浏览工具的代码用于以二进制的形式结构化浏览数据。
其中,从所述内存中获取记录的关键字段,以获取内存操作函数调用关系和操作信息并定位错位,包括:
从所述内存中获取每个所述线程记录的关键字段,以获取每个所述线程的内存操作函数调用关系和操作信息;
基于二进制结构化浏览工具浏览每个所述线程的内存操作函数调用关系和操作信息并定位错误。
其中,所述当检测到内存页错误时,从所述内存中获取记录的关键字段,包括:
当接收到操作系统发送的异常信号或中断信号时,判定发生内存页错误,从所述内存中获取记录的关键字段。
其中,当检测到访问非法内存区域的操作时,所述操作系统发送所述异常信号或所述中断信号。
其中,当检测到访问已释放内存区域的操作时,所述操作系统发送所述异常信号或所述中断信号。
其中,所述当检测到内存页错误时,从所述内存中获取记录的关键字段,以获取内存操作函数调用关系和操作信息并定位错误,包括:
当检测到内存页错误时,从所述内存中获取记录的关键字段,以生成转储文件;
基于所述转储文件确定内存操作函数调用关系和操作信息并定位错误。
其中,所述获取内存操作函数调用关系和操作信息并定位错误,包括:
获取内存操作函数调用关系和操作信息,并根据所述内存操作函数调用关系和所述操作信息定位错误函数,并在所述错误函数中确定错误操作或错误传递参数。
为实现上述目的,本申请提供了一种日志记录装置,应用于存储系统,所述装置包括:
第一创建模块,用于根据内存操作函数调用关系创建树形模型;其中,所述内存操作函数调用关系包括多级业务函数之间的调用关系、业务函数与缓存区接口函数之间的调用关系、缓存区接口函数与内存页接口函数之间的调用关系,所述树形模型中的每个节点对应一个函数;
第一添加模块,用于在所述树形模型中的每个节点中添加日志记录代码;其中,所述日志记录代码用于记录所述节点对应的函数的关键字段,所述关键字段用于描述所述树形模型的结构和记录操作信息;
写入模块,用于当运行到所述日志记录代码时,将所述节点对应的函数的关键字段写入内存,以在所述内存中生成日志;
获取模块,用于当检测到内存页错误时,从所述内存中获取记录的关键字段,以获取内存操作函数调用关系和操作信息并定位错误。
其中,还包括:
申请模块,用于在所述内存中申请内存空间,所述内存空间用于记录所述关键字段。
其中,还包括:
第二创建模块,用于在所述内存空间中创建循环队列,所述循环队列用于记录所述关键字段。
其中,所述第二创建模块具体用于:在所述内存空间中为每个线程创建对应的循环队列,所述循环队列用于记录所述线程调用的函数的关键字段。
其中,所述写入模块具体用于:确定所述节点对应的函数对应的线程,将所述函数的关键字段写入所述线程对应的循环队列中。
其中,所述写入模块包括:
判断单元,用于判断所述线程对应的循环队列是否已满;
第一写入单元,用于当所述线程对应的循环队列未满时,将所述函数的关键字段写入所述循环队列中第一个不为空的位置;
第二写入单元,用于当所述线程对应的循环队列已满时,将所述函数的关键字段写入所述循环队列中最早写入数据的位置。
其中,所述判断单元具体用于:判断所述线程对应的循环队列是否满足预设条件;若是,则判定所述循环队列已满;其中,所述预设条件为:(rear+1)%maxSize=front,front为所述循环队列中第一个元素的位置,rear为所述循环队列中最后一个元素的后一个位置,maxSize为所述循环队列的位置总数,%为取余操作。
其中,所述获取模块具体用于:从所述内存中获取每个所述线程记录的关键字段,以获取每个线程的内存操作函数调用关系和操作信息并定位错误。
其中,所述关键字段包括当前函数名、函数位置、上级函数名、访问起始地址、访问长度、访问类型中任一项或任几项的组合,所述当前函数名、所述函数位置、所述上级函数名用于描述所述树形模型的结构,所述访问起始地址、所述访问长度、所述访问类型用于记录操作信息。
其中,还包括:
第二添加模块,用于在所述日志的代码中添加二进制结构化浏览工具的代码,所述二进制结构化浏览工具的代码用于以二进制的形式结构化浏览数据。
其中,所述获取模块具体用于:从所述内存中获取每个所述线程记录的关键字段,以获取每个所述线程的内存操作函数调用关系和操作信息;基于二进制结构化浏览工具浏览每个所述线程的内存操作函数调用关系和操作信息并定位错误。
其中,所述获取模块具体用于:当接收到操作系统发送的异常信号或中断信号时,判定发生内存页错误,从所述内存中获取记录的关键字段。
其中,当检测到访问非法内存区域的操作时,所述操作系统发送所述异常信号或所述中断信号。
其中,当检测到访问已释放内存区域的操作时,所述操作系统发送所述异常信号或所述中断信号。
其中,所述获取模块具体用于:当检测到内存页错误时,从所述内存中获取记录的关键字段,以生成转储文件;基于所述转储文件确定内存操作函数调用关系和操作信息并定位错误。
其中,所述获取模块具体用于:获取内存操作函数调用关系和操作信息,并根据所述内存操作函数调用关系和所述操作信息定位错误函数,并在所述错误函数中确定错误操作或错误传递参数。
为实现上述目的,本申请提供了一种电子设备,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序时实现如上述日志记录方法的步骤。
为实现上述目的,本申请提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上述日志记录方法的步骤。
通过以上方案可知,本申请提供的一种日志记录方法,应用于存储系统,所述方法包括:根据内存操作函数调用关系创建树形模型;其中,所述内存操作函数调用关系包括多级业务函数之间的调用关系、业务函数与缓存区接口函数之间的调用关系、缓存区接口函数与内存页接口函数之间的调用关系,所述树形模型中的每个节点对应一个函数;在所述树形模型中的每个节点中添加日志记录代码;其中,所述日志记录代码用于记录所述节点对应的函数的关键字段,所述关键字段用于描述所述树形模型的结构和记录操作信息;当运行到所述日志记录代码时,将所述节点对应的函数的关键字段写入内存,以在所述内存中生成日志;当检测到内存页错误时,从所述内存中获取记录的关键字段,以获取内存操作函数调用关系和操作信息并定位错误。
本申请提供的日志记录方法,根据内存操作函数调用关系创建树形模型,在树形模型中的每个节点中添加日志记录代码,当运行到日志记录代码时,将对应函数的关键字段写入内存生成日志,当检测到内存页错误时,可以从内存中获取记录的关键字段,根据其中的内存操作函数调用关系和操作信息定位错误。由此可见,本申请实现了存储系统的日志记录和内存错误定位,同时,利用内存操作函数调用关系进行内存错误定位,提高了内存错误定位的准确性。本申请还公开了一种日志记录装置及一种电子设备和一种计算机可读存储介质,同样能实现上述技术效果。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性的,并不能限制本申请。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。附图是用来提供对本公开的进一步理解,并且构成说明书的一部分,与下面的具体实施方式一起用于解释本公开,但并不构成对本公开的限制。在附图中:
图1为根据一示例性实施例示出的一种日志记录方法的流程图;
图2为根据一示例性实施例示出的一种树形模型的示意图;
图3为根据一示例性实施例示出的一种循环队列的示意图;
图4为根据一示例性实施例示出的另一种日志记录方法的流程图;
图5为根据一示例性实施例示出的一种内存空间中循环队列的示意图;
图6为根据一示例性实施例示出的一种日志记录装置的结构图;
图7为根据一示例性实施例示出的一种电子设备的结构图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。另外,在本申请实施例中,“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。
本申请实施例公开了一种日志记录方法,实现了存储系统的日志记录。
参见图1,根据一示例性实施例示出的一种日志记录方法的流程图,如图1所示,包括:
S101:根据内存操作函数调用关系创建树形模型;其中,所述内存操作函数调用关系包括多级业务函数之间的调用关系、业务函数与缓存区接口函数之间的调用关系、缓存区接口函数与内存页接口函数之间的调用关系,所述树形模型中的每个节点对应一个函数;
本实施例应用于存储系统,目的在于对存储系统自建内存池中自定义内存页进行日志记录。
可以理解的是,由于内存调用属于底层通用函数,上层函数会对他进行交叉调用,上层的上层再对上层函数进行调用,由此形成了复杂的调用关系。因此,在本步骤中,根据内存操作函数调用关系创建树形模型,树形模型中的每个节点对应一个函数。内存操作函数调用关系包括多级业务函数之间的调用关系、业务函数与缓存区接口函数之间的调用关系、缓存区接口函数与内存页接口函数之间的调用关系,创建的树形模型如图2所示。
通过树形模型可以描述内存操作的全过程。例如,哪个业务函数调用了哪个缓存区接口函数,哪个缓存区接口函数调用了哪个内存页接口函数。
S102:在所述树形模型中的每个节点中添加日志记录代码;其中,所述日志记录代码用于记录所述节点对应的函数的关键字段,所述关键字段用于描述所述树形模型的结构和记录操作信息;
在本步骤中,按照函数调用的树形关系,在树形模型中的每个节点中添加日志记录代码,用于记录对应的函数的关键字段,关键字段用于描述所述树形模型的结构和记录操作信息。
关键字段可以包括当前函数名、函数位置、上级函数名、访问起始地址、访问长度、访问类型等,当前函数名、函数位置、上级函数名用于描述树形模型的结构,访问起始地址、访问长度、访问类型用于记录操作信息。当前函数名为定长字符串,用于记录当前函数的名称,超出指定长度,做截断处理。函数位置为整型字段,一个函数内调用多个下级函数时,使用该字段做代码行的区分。上级函数名为定长字符串,用于记录上级函数的名称,超出指定长度,做截断处理。访问起始地址为整型字段,在不同层意义不同,可以用于表示内存页编号、buffer(缓存)单位编号、缓存数据块地址等。访问长度为整型字段,在不同层意义不同,可以用于表示sector(扇区)数量、内存页数量、缓存数据块数量等。访问类型为整型字段,可以包括申请、释放、读、写、拷贝等。
S103:当运行到所述日志记录代码时,将所述节点对应的函数的关键字段写入内存,以在所述内存中生成日志;
作为一种可行的实施方式,将所述节点对应的函数的关键字段写入内存之前,还包括:在所述内存中申请内存空间,所述内存空间用于记录所述关键字段。在具体实施中,申请大块连续内存空间,用来存储日志数据。
作为一种优选实施方式,在所述内存中申请内存空间之后,还包括:在所述内存空间中创建循环队列,所述循环队列用于记录所述关键字段。在具体实施中,可以在申请的内存空间中创建基于结构体数组的循环队列,如图3所示,用于记录函数的关键字段。
当程序运行到日志记录代码时,会将节点对应的函数的关键字段写入内存。这些信息在内存中会形成一个日志,这个日志可以用来记录程序执行过程中的重要事件和操作。添加日志后不会影响正常的业务性能,不影响问题的复现。
S104:当检测到内存页错误时,从所述内存中获取记录的关键字段,以获取内存操作函数调用关系和操作信息并定位错误。
在具体实施中,当检测到内存页错误时,可以从内存中获取记录的关键字段,这些关键字段包含了内存操作函数调用关系和操作信息。利用这些信息,可以定位错误发生的位置和原因。
作为一种可行的实施方式,所述当检测到内存页错误时,从所述内存中获取记录的关键字段,包括:当接收到操作系统发送的异常信号或中断信号时,判定发生内存页错误,从所述内存中获取记录的关键字段。
作为一种可行的实施方式,当检测到访问非法内存区域的操作时,所述操作系统发送所述异常信号或所述中断信号。作为另一种可行的实施方式,当检测到访问已释放内存区域的操作时,所述操作系统发送所述异常信号或所述中断信号。
可以理解的是,内存页错误通常是由于访问非法内存区域或者访问已经释放的内存区域所导致的。在程序执行过程中,如果发生了内存页错误,操作系统会发送一个异常信号或者中断信号给程序,通知程序发生了错误。在接收到这个信号后,程序会调用相应的错误处理函数或者异常处理函数来进行处理。在这个处理过程中,可以通过调用日志记录代码来获取发生错误时的关键字段,这些字段包括了函数调用关系和操作信息。
作为一种可行的实施方式,所述当检测到内存页错误时,从所述内存中获取记录的关键字段,以获取内存操作函数调用关系和操作信息并定位错误,包括:当检测到内存页错误时,从所述内存中获取记录的关键字段,以生成转储文件;基于所述转储文件确定内存操作函数调用关系和操作信息并定位错误。在具体实施中,当程序检查到内存页错误时,显示触发assert(断言),使程序崩溃并生成dump(转储文件),通过分析转储文件可以定位错误。
作为一种可行的实施方式,所述获取内存操作函数调用关系和操作信息并定位错误,包括:获取内存操作函数调用关系和操作信息,并根据所述内存操作函数调用关系和所述操作信息定位错误函数,并在所述错误函数中确定错误操作或错误传递参数。在具体实施中,通过内存操作函数调用关系和操作信息可以了解到在哪个函数中发生了错误,以及这个函数在执行时调用了哪些其他的函数。此外,还可以了解到函数的参数、执行结果以及执行时间等信息,这些信息可以帮助更好地理解函数的执行过程和行为。利用这些关键字段的信息,可以快速定位错误发生的位置和原因。例如,如果发现错误发生在某个特定的函数中,那么可以仔细检查这个函数的代码,看看是不是有哪些操作导致了内存页错误。如果发现这个函数在执行时调用了一个不正确的函数或者传递了错误的参数,那么这就是导致错误的原因。
作为一种优选实施方式,在所述内存中生成日志之后,还包括:在所述日志的代码中添加二进制结构化浏览工具的代码,所述二进制结构化浏览工具的代码用于以二进制的形式结构化浏览数据。
在具体实施中,日志队列代码里,添加二进制结构化浏览工具的代码,用于以二进制的形式结构化浏览数据。这个工具可以帮助开发人员以可视化的方式查看和分析程序的执行过程。通过将每个线程的内存操作函数调用关系和操作信息呈现为图形界面,开发人员可以更直观地了解程序的执行过程和行为。这样可以帮助开发人员更快地找到错误的位置和原因。当检测到内存页错误时,从内存中获取记录的关键字段,基于二进制结构化浏览工具浏览内存操作函数调用关系和操作信息并定位错误。
本申请实施例提供的日志记录方法,根据内存操作函数调用关系创建树形模型,在树形模型中的每个节点中添加日志记录代码,当运行到日志记录代码时,将对应函数的关键字段写入内存生成日志,当检测到内存页错误时,可以从内存中获取记录的关键字段,根据其中的内存操作函数调用关系和操作信息定位错误。由此可见,本申请实施例实现了存储系统的日志记录和内存错误定位,同时,利用内存操作函数调用关系进行内存错误定位,提高了内存错误定位的准确性。
本申请实施例公开了一种日志记录方法,相对于上一实施例,本实施例对技术方案作了进一步的说明和优化。具体的:
参见图4,根据一示例性实施例示出的另一种日志记录方法的流程图,如图4所示,包括:
S201:在所述内存中申请内存空间,在所述内存空间中为每个线程创建对应的循环队列,所述循环队列用于记录所述线程调用的函数的关键字段。
在本实施例中,在申请的内存空间中为每个线程创建一个循环队列,用于该线程调用的所有函数的关键字段,如图5所示。内存空间是程序执行过程中用于存储数据的区域。在内存中申请空间是为每个线程创建循环队列提供必要的内存空间。循环队列是一种数据结构,它可以在固定大小的数组中实现队列的操作。在这个场景下,循环队列用于记录每个线程调用的函数的关键字段。每个线程都有自己对应的循环队列,这个循环队列用于存储该线程执行过程中调用的函数的关键字段信息。当线程调用一个函数时,该函数的关键字段信息就会被添加到该线程对应的循环队列中。通过在内存中为每个线程创建对应的循环队列,可以方便地对线程的执行过程进行跟踪和记录。这样可以在程序出现错误时,通过查看循环队列中的信息来分析错误的原因和位置。
在循环队列中,front就指向队列的第一个元素,也就是说arr[front]就是队列的第一个元素,front的初始值为0,rear指向队列的最后一个元素的后一个位置,因为希望空出一个空间做为约定,rear的初始值为0。队列满的条件是(rear+1)%maxSize==front,队列为空的条件是rear==front。
可见,本实施例可以采用循环队列的方式按照调用函数的线程将日志记录在内存,不同于现有技术中按照时间线的方式记录在磁盘。
S202:根据内存操作函数调用关系创建树形模型;其中,所述内存操作函数调用关系包括多级业务函数之间的调用关系、业务函数与缓存区接口函数之间的调用关系、缓存区接口函数与内存页接口函数之间的调用关系,所述树形模型中的每个节点对应一个函数;
S203:在所述树形模型中的每个节点中添加日志记录代码;其中,所述日志记录代码用于记录所述节点对应的函数的关键字段,所述关键字段用于描述所述树形模型的结构和记录操作信息;
本实施例在日志记录过程中可以完整的记录每个线程对内存操作的函数调用关系。而现有技术记录的是单个函数,不能体现函数调用关系。内存函数都是底层通用函数,会被不同的业务模块大量频繁的调用,当内存错误发生时,完整的记录下每个线程对内存操作的函数调用关系,可以定位实际是谁做了错误操作。
S204:当运行到所述日志记录代码时,确定所述节点对应的函数对应的线程,将所述函数的关键字段写入所述线程对应的循环队列中,以生成日志;
在具体实施中,程序运行到函数里的日志记录代码时,首先获取本函数当前的线程序列号,根据线程序列号获取到对应的循环队列,将函数的关键字段写入循环队列中。
作为一种可行的实施方式,将所述函数的关键字段写入所述线程对应的循环队列中,包括:判断所述线程对应的循环队列是否已满;若否,则将所述函数的关键字段写入所述循环队列中第一个不为空的位置;若是,则将所述函数的关键字段写入所述循环队列中最早写入数据的位置。
在具体实施中,判断所述线程对应的循环队列是否满足预设条件;若是,则判定所述循环队列已满;其中,所述预设条件为:(rear+1)%maxSize=front,front为所述循环队列中第一个元素的位置,rear为所述循环队列中最后一个元素的后一个位置,maxSize为所述循环队列的位置总数,%为取余操作。
在日志记录过程中,获取循环队列的首节点,将函数的关键字段写入首节点,其中上级调用函数的名称使用backtrace函数获取。当日志数量超过队列的长度时,用新日志覆盖老日志。
S205:当检测到内存页错误时,从所述内存中获取每个所述线程记录的关键字段,以获取每个所述线程的内存操作函数调用关系和操作信息并定位错误;
S206:基于二进制结构化浏览工具浏览每个所述线程的内存操作函数调用关系和操作信息并定位错误。
在具体实施中,当程序检查到内存页错误时,显示触发assert,使程序崩溃并生成dump,基于二进制结构化浏览工具,浏览每个线程的内存操作函数调用关系,根据内存操作的类型、起始地址、长度等信息,定位内存错误的根本原因。
下面对本申请实施例提供的一种日志记录装置进行介绍,下文描述的一种日志记录装置与上文描述的一种日志记录方法可以相互参照。
参见图6,根据一示例性实施例示出的一种日志记录装置的结构图,如图6所示,包括:
第一创建模块100,用于根据内存操作函数调用关系创建树形模型;其中,所述内存操作函数调用关系包括多级业务函数之间的调用关系、业务函数与缓存区接口函数之间的调用关系、缓存区接口函数与内存页接口函数之间的调用关系,所述树形模型中的每个节点对应一个函数;
本实施例应用于存储系统,目的在于对存储系统自建内存池中自定义内存页进行日志记录。
可以理解的是,由于内存调用属于底层通用函数,上层函数会对他进行交叉调用,上层的上层再对上层函数进行调用,由此形成了复杂的调用关系。因此,在本步骤中,根据内存操作函数调用关系创建树形模型,树形模型中的每个节点对应一个函数。内存操作函数调用关系包括多级业务函数之间的调用关系、业务函数与缓存区接口函数之间的调用关系、缓存区接口函数与内存页接口函数之间的调用关系。通过树形模型可以描述内存操作的全过程。例如,哪个业务函数调用了哪个缓存区接口函数,哪个缓存区接口函数调用了哪个内存页接口函数。
第一添加模块200,用于在所述树形模型中的每个节点中添加日志记录代码;其中,所述日志记录代码用于记录所述节点对应的函数的关键字段,所述关键字段用于描述所述树形模型的结构和记录操作信息;
在本步骤中,按照函数调用的树形关系,在树形模型中的每个节点中添加日志记录代码,用于记录对应的函数的关键字段,关键字段用于描述所述树形模型的结构和记录操作信息。
关键字段可以包括当前函数名、函数位置、上级函数名、访问起始地址、访问长度、访问类型等,当前函数名、函数位置、上级函数名用于描述树形模型的结构,访问起始地址、访问长度、访问类型用于记录操作信息。当前函数名为定长字符串,用于记录当前函数的名称,超出指定长度,做截断处理。函数位置为整型字段,一个函数内调用多个下级函数时,使用该字段做代码行的区分。上级函数名为定长字符串,用于记录上级函数的名称,超出指定长度,做截断处理。访问起始地址为整型字段,在不同层意义不同,可以用于表示内存页编号、buffer单位编号、缓存数据块地址等。访问长度为整型字段,在不同层意义不同,可以用于表示sector数量、内存页数量、缓存数据块数量等。访问类型为整型字段,可以包括申请、释放、读、写、拷贝等。
写入模块300,用于当运行到所述日志记录代码时,将所述节点对应的函数的关键字段写入内存,以在所述内存中生成日志;
在具体实施中,当程序运行到日志记录代码时,会将节点对应的函数的关键字段写入内存。这些信息在内存中会形成一个日志,这个日志可以用来记录程序执行过程中的重要事件和操作。添加日志后不会影响正常的业务性能,不影响问题的复现。
获取模块400,用于当检测到内存页错误时,从所述内存中获取记录的关键字段,以获取内存操作函数调用关系和操作信息并定位错误。
在具体实施中,当检测到内存页错误时,可以从内存中获取记录的关键字段,这些关键字段包含了内存操作函数调用关系和操作信息。利用这些信息,可以定位错误发生的位置和原因。内存页错误通常是由于访问非法内存区域或者访问已经释放的内存区域所导致的。在程序执行过程中,如果发生了内存页错误,操作系统会发送一个异常信号或者中断信号给程序,通知程序发生了错误。在接收到这个信号后,程序会调用相应的错误处理函数或者异常处理函数来进行处理。在这个处理过程中,可以通过调用日志记录代码来获取发生错误时的关键字段,这些字段包括了函数调用关系和操作信息。通过这些信息,可以了解到在哪个函数中发生了错误,以及这个函数在执行时调用了哪些其他的函数。此外,还可以了解到函数的参数、执行结果以及执行时间等信息,这些信息可以帮助更好地理解函数的执行过程和行为。利用这些关键字段的信息,可以快速定位错误发生的位置和原因。例如,如果发现错误发生在某个特定的函数中,那么可以仔细检查这个函数的代码,看看是不是有哪些操作导致了内存页错误。如果发现这个函数在执行时调用了一个不正确的函数或者传递了错误的参数,那么这就是导致错误的原因。
本申请实施例提供的日志记录装置,根据内存操作函数调用关系创建树形模型,在树形模型中的每个节点中添加日志记录代码,当运行到日志记录代码时,将对应函数的关键字段写入内存生成日志,当检测到内存页错误时,可以从内存中获取记录的关键字段,根据其中的内存操作函数调用关系和操作信息定位错误。由此可见,本申请实施例实现了存储系统的日志记录和内存错误定位,同时,利用内存操作函数调用关系进行内存错误定位,提高了内存错误定位的准确性。
在上述实施例的基础上,作为一种优选实施方式,还包括:
申请模块,用于在所述内存中申请内存空间,所述内存空间用于记录所述关键字段。
在具体实施中,申请大块连续内存空间,用来存储日志数据。
在上述实施例的基础上,作为一种优选实施方式,还包括:
第二创建模块,用于在所述内存空间中创建循环队列,所述循环队列用于记录所述关键字段。
在具体实施中,可以在申请的内存空间中创建基于结构体数组的循环队列,用于记录函数的关键字段。
在上述实施例的基础上,作为一种优选实施方式,所述第二创建模块具体用于:在所述内存空间中为每个线程创建对应的循环队列,所述循环队列用于记录所述线程调用的函数的关键字段。
在申请的内存空间中为每个线程创建一个循环队列,用于该线程调用的所有函数的关键字段。内存空间是程序执行过程中用于存储数据的区域。在内存中申请空间是为每个线程创建循环队列提供必要的内存空间。循环队列是一种数据结构,它可以在固定大小的数组中实现队列的操作。在这个场景下,循环队列用于记录每个线程调用的函数的关键字段。每个线程都有自己对应的循环队列,这个循环队列用于存储该线程执行过程中调用的函数的关键字段信息。当线程调用一个函数时,该函数的关键字段信息就会被添加到该线程对应的循环队列中。通过在内存中为每个线程创建对应的循环队列,可以方便地对线程的执行过程进行跟踪和记录。这样可以在程序出现错误时,通过查看循环队列中的信息来分析错误的原因和位置。
在循环队列中,front就指向队列的第一个元素,也就是说arr[front]就是队列的第一个元素,front的初始值为0,rear指向队列的最后一个元素的后一个位置,因为希望空出一个空间做为约定,rear的初始值为0。队列满的条件是(rear+1)%maxSize==front,队列为空的条件是rear==front。
可见,本实施例可以采用循环队列的方式按照调用函数的线程将日志记录在内存,不同于现有技术中按照时间线的方式记录在磁盘。
在上述实施例的基础上,作为一种优选实施方式,所述写入模块300具体用于:确定所述节点对应的函数对应的线程,将所述函数的关键字段写入所述线程对应的循环队列中。
在具体实施中,程序运行到函数里的日志记录代码时,首先获取本函数当前的线程序列号,根据线程序列号获取到对应的循环队列,将函数的关键字段写入循环队列中。
在上述实施例的基础上,作为一种优选实施方式,所述写入模块300包括:
判断单元,用于判断所述线程对应的循环队列是否已满;
第一写入单元,用于当所述线程对应的循环队列未满时,将所述函数的关键字段写入所述循环队列中第一个不为空的位置;
第二写入单元,用于当所述线程对应的循环队列已满时,将所述函数的关键字段写入所述循环队列中最早写入数据的位置。
在上述实施例的基础上,作为一种优选实施方式,所述判断单元具体用于:判断所述线程对应的循环队列是否满足预设条件;若是,则判定所述循环队列已满;其中,所述预设条件为:(rear+1)%maxSize=front,front为所述循环队列中第一个元素的位置,rear为所述循环队列中最后一个元素的后一个位置,maxSize为所述循环队列的位置总数,%为取余操作。
在上述实施例的基础上,作为一种优选实施方式,所述获取模块400具体用于:从所述内存中获取每个所述线程记录的关键字段,以获取每个线程的内存操作函数调用关系和操作信息并定位错误。
在上述实施例的基础上,作为一种优选实施方式,还包括:
第二添加模块,用于在所述日志的代码中添加二进制结构化浏览工具的代码,所述二进制结构化浏览工具的代码用于以二进制的形式结构化浏览数据。
在具体实施中,当程序检查到内存页错误时,显示触发assert,使程序崩溃并生成dump,基于二进制结构化浏览工具,浏览每个线程的内存操作函数调用关系,根据内存操作的类型、起始地址、长度等信息,定位内存错误的根本原因。
在上述实施例的基础上,作为一种优选实施方式,所述获取模块400具体用于:从所述内存中获取每个所述线程记录的关键字段,以获取每个所述线程的内存操作函数调用关系和操作信息;基于二进制结构化浏览工具浏览每个所述线程的内存操作函数调用关系和操作信息并定位错误。
在上述实施例的基础上,作为一种优选实施方式,所述获取模块400具体用于:当接收到操作系统发送的异常信号或中断信号时,判定发生内存页错误,从所述内存中获取记录的关键字段。
在上述实施例的基础上,作为一种优选实施方式,当检测到访问非法内存区域的操作时,所述操作系统发送所述异常信号或所述中断信号。
在上述实施例的基础上,作为一种优选实施方式,当检测到访问已释放内存区域的操作时,所述操作系统发送所述异常信号或所述中断信号。
在上述实施例的基础上,作为一种优选实施方式,所述获取模块400具体用于:当检测到内存页错误时,从所述内存中获取记录的关键字段,以生成转储文件;基于所述转储文件确定内存操作函数调用关系和操作信息并定位错误。
在上述实施例的基础上,作为一种优选实施方式,所述获取模块400具体用于:获取内存操作函数调用关系和操作信息,并根据所述内存操作函数调用关系和所述操作信息定位错误函数,并在所述错误函数中确定错误操作或错误传递参数。
关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
基于上述程序模块的硬件实现,且为了实现本申请实施例的方法,本申请实施例还提供了一种电子设备,图7为根据一示例性实施例示出的一种电子设备的结构图,如图7所示,电子设备包括:
通信接口1,能够与其它设备比如网络设备等进行信息交互;
处理器2,与通信接口1连接,以实现与其它设备进行信息交互,用于运行计算机程序时,执行上述一个或多个技术方案提供的日志记录方法。而所述计算机程序存储在存储器3上。
当然,实际应用时,电子设备中的各个组件通过总线系统4耦合在一起。可理解,总线系统4用于实现这些组件之间的连接通信。总线系统4除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图7中将各种总线都标为总线系统4。
本申请实施例中的存储器3用于存储各种类型的数据以支持电子设备的操作。这些数据的示例包括:用于在电子设备上操作的任何计算机程序。
可以理解,存储器3可以是易失性存储器或非易失性存储器,也可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(ROM,Read Only Memory)、可编程只读存储器(PROM,Programmable Read-Only Memory)、可擦除可编程只读存储器(EPROM,Erasable Programmable Read-Only Memory)、电可擦除可编程只读存储器(EEPROM,Electrically Erasable Programmable Read-Only Memory)、磁性随机存取存储器(FRAM,ferromagnetic random access memory)、快闪存储器(Flash Memory)、磁表面存储器、光盘、或只读光盘(CD-ROM,Compact Disc Read-Only Memory);磁表面存储器可以是磁盘存储器或磁带存储器。易失性存储器可以是随机存取存储器(RAM,Random AccessMemory),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的RAM可用,例如静态随机存取存储器(SRAM,Static Random Access Memory)、同步静态随机存取存储器(SSRAM,Synchronous Static Random Access Memory)、动态随机存取存储器(DRAM,Dynamic Random Access Memory)、同步动态随机存取存储器(SDRAM,SynchronousDynamic Random Access Memory)、双倍数据速率同步动态随机存取存储器(DDRSDRAM,Double Data Rate Synchronous Dynamic Random Access Memory)、增强型同步动态随机存取存储器(ESDRAM,Enhanced Synchronous Dynamic Random Access Memory)、同步连接动态随机存取存储器(SLDRAM,SyncLink Dynamic Random Access Memory)、直接内存总线随机存取存储器(DRRAM,Direct Rambus Random Access Memory)。本申请实施例描述的存储器3旨在包括但不限于这些和任意其它适合类型的存储器。
上述本申请实施例揭示的方法可以应用于处理器2中,或者由处理器2实现。处理器2可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器2中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器2可以是通用处理器、DSP,或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。处理器2可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者任何常规的处理器等。结合本申请实施例所公开的方法的步骤,可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于存储介质中,该存储介质位于存储器3,处理器2读取存储器3中的程序,结合其硬件完成前述方法的步骤。
处理器2执行所述程序时实现本申请实施例的各个方法中的相应流程,为了简洁,在此不再赘述。
在示例性实施例中,本申请实施例还提供了一种存储介质,即计算机存储介质,具体为计算机可读存储介质,例如包括存储计算机程序的存储器3,上述计算机程序可由处理器2执行,以完成前述方法所述步骤。计算机可读存储介质可以是FRAM、ROM、PROM、EPROM、EEPROM、Flash Memory、磁表面存储器、光盘、CD-ROM等存储器。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:移动存储设备、ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
或者,本申请上述集成的单元如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实施例的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台电子设备(可以是个人计算机、服务器、网络设备等)执行本申请各个实施例所述方法的全部或部分。而前述的存储介质包括:移动存储设备、ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。
Claims (20)
1.一种日志记录方法,其特征在于,应用于存储系统,所述方法包括:
根据内存操作函数调用关系创建树形模型;其中,所述内存操作函数调用关系包括多级业务函数之间的调用关系、业务函数与缓存区接口函数之间的调用关系、缓存区接口函数与内存页接口函数之间的调用关系,所述树形模型中的每个节点对应一个函数;
在所述树形模型中的每个节点中添加日志记录代码;其中,所述日志记录代码用于记录所述节点对应的函数的关键字段,所述关键字段用于描述所述树形模型的结构和记录操作信息;
当运行到所述日志记录代码时,将所述节点对应的函数的关键字段写入内存,以在所述内存中生成日志;
当检测到内存页错误时,从所述内存中获取记录的关键字段,以获取内存操作函数调用关系和操作信息并定位错误。
2.根据权利要求1所述日志记录方法,其特征在于,将所述节点对应的函数的关键字段写入内存之前,还包括:
在所述内存中申请内存空间,所述内存空间用于记录所述关键字段。
3.根据权利要求2所述日志记录方法,其特征在于,在所述内存中申请内存空间之后,还包括:
在所述内存空间中创建循环队列,所述循环队列用于记录所述关键字段。
4.根据权利要求3所述日志记录方法,其特征在于,在所述内存空间中创建循环队列,包括:
在所述内存空间中为每个线程创建对应的循环队列,所述循环队列用于记录所述线程调用的函数的关键字段。
5.根据权利要求4所述日志记录方法,其特征在于,将所述节点对应的函数的关键字段写入内存,包括:
确定所述节点对应的函数对应的线程,将所述函数的关键字段写入所述线程对应的循环队列中。
6.根据权利要求5所述日志记录方法,其特征在于,将所述函数的关键字段写入所述线程对应的循环队列中,包括:
判断所述线程对应的循环队列是否已满;
若否,则将所述函数的关键字段写入所述循环队列中第一个不为空的位置。
7.根据权利要求6所述日志记录方法,其特征在于,所述判断所述线程对应的循环队列是否已满之后,还包括:
当所述线程对应的循环队列已满时,将所述函数的关键字段写入所述循环队列中最早写入数据的位置。
8.根据权利要求6所述日志记录方法,其特征在于,所述判断所述线程对应的循环队列是否已满,包括:
判断所述线程对应的循环队列是否满足预设条件;若是,则判定所述循环队列已满;其中,所述预设条件为:(rear+1)%maxSize=front,front为所述循环队列中第一个元素的位置,rear为所述循环队列中最后一个元素的后一个位置,maxSize为所述循环队列的位置总数,%为取余操作。
9.根据权利要求4所述日志记录方法,其特征在于,从所述内存中获取记录的关键字段,以获取内存操作函数调用关系和操作信息并定位错误,包括:
从所述内存中获取每个所述线程记录的关键字段,以获取每个线程的内存操作函数调用关系和操作信息并定位错误。
10.根据权利要求1所述日志记录方法,其特征在于,所述关键字段包括当前函数名、函数位置、上级函数名、访问起始地址、访问长度、访问类型中任一项或任几项的组合,所述当前函数名、所述函数位置、所述上级函数名用于描述所述树形模型的结构,所述访问起始地址、所述访问长度、所述访问类型用于记录操作信息。
11.根据权利要求4所述日志记录方法,其特征在于,在所述内存中生成日志之后,还包括:
在所述日志的代码中添加二进制结构化浏览工具的代码,所述二进制结构化浏览工具的代码用于以二进制的形式结构化浏览数据。
12.根据权利要求11所述日志记录方法,其特征在于,从所述内存中获取记录的关键字段,以获取内存操作函数调用关系和操作信息并定位错位,包括:
从所述内存中获取每个所述线程记录的关键字段,以获取每个所述线程的内存操作函数调用关系和操作信息;
基于二进制结构化浏览工具浏览每个所述线程的内存操作函数调用关系和操作信息并定位错误。
13.根据权利要求1所述日志记录方法,其特征在于,所述当检测到内存页错误时,从所述内存中获取记录的关键字段,包括:
当接收到操作系统发送的异常信号或中断信号时,判定发生内存页错误,从所述内存中获取记录的关键字段。
14.根据权利要求13所述日志记录方法,其特征在于,当检测到访问非法内存区域的操作时,所述操作系统发送所述异常信号或所述中断信号。
15.根据权利要求13所述日志记录方法,其特征在于,当检测到访问已释放内存区域的操作时,所述操作系统发送所述异常信号或所述中断信号。
16.根据权利要求1所述日志记录方法,其特征在于,所述当检测到内存页错误时,从所述内存中获取记录的关键字段,以获取内存操作函数调用关系和操作信息并定位错误,包括:
当检测到内存页错误时,从所述内存中获取记录的关键字段,以生成转储文件;
基于所述转储文件确定内存操作函数调用关系和操作信息并定位错误。
17.根据权利要求1所述日志记录方法,其特征在于,所述获取内存操作函数调用关系和操作信息并定位错误,包括:
获取内存操作函数调用关系和操作信息,并根据所述内存操作函数调用关系和所述操作信息定位错误函数,并在所述错误函数中确定错误操作或错误传递参数。
18.一种日志记录装置,其特征在于,应用于存储系统,所述装置包括:
第一创建模块,用于根据内存操作函数调用关系创建树形模型;其中,所述内存操作函数调用关系包括多级业务函数之间的调用关系、业务函数与缓存区接口函数之间的调用关系、缓存区接口函数与内存页接口函数之间的调用关系,所述树形模型中的每个节点对应一个函数;
第一添加模块,用于在所述树形模型中的每个节点中添加日志记录代码;其中,所述日志记录代码用于记录所述节点对应的函数的关键字段,所述关键字段用于描述所述树形模型的结构和记录操作信息;
写入模块,用于当运行到所述日志记录代码时,将所述节点对应的函数的关键字段写入内存,以在所述内存中生成日志;
获取模块,用于当检测到内存页错误时,从所述内存中获取记录的关键字段,以获取内存操作函数调用关系和操作信息并定位错误。
19.一种电子设备,其特征在于,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序时实现如权利要求1至17任一项所述日志记录方法的步骤。
20.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至17任一项所述日志记录方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311756821.3A CN117435385B (zh) | 2023-12-20 | 2023-12-20 | 一种日志记录方法、装置及电子设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311756821.3A CN117435385B (zh) | 2023-12-20 | 2023-12-20 | 一种日志记录方法、装置及电子设备和存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN117435385A true CN117435385A (zh) | 2024-01-23 |
CN117435385B CN117435385B (zh) | 2024-02-23 |
Family
ID=89553864
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311756821.3A Active CN117435385B (zh) | 2023-12-20 | 2023-12-20 | 一种日志记录方法、装置及电子设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117435385B (zh) |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2014191422A (ja) * | 2013-03-26 | 2014-10-06 | Nec Corp | ログ関連性提示システム、ログ関連性提示方法及びコンピュータプログラム |
CN109032929A (zh) * | 2018-06-29 | 2018-12-18 | 北京金山安全软件有限公司 | 一种程序日志记录获取方法、装置及电子设备 |
CN109522209A (zh) * | 2018-09-29 | 2019-03-26 | 中国平安人寿保险股份有限公司 | 日志堆栈信息分析方法及装置、计算机装置及存储介质 |
-
2023
- 2023-12-20 CN CN202311756821.3A patent/CN117435385B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2014191422A (ja) * | 2013-03-26 | 2014-10-06 | Nec Corp | ログ関連性提示システム、ログ関連性提示方法及びコンピュータプログラム |
CN109032929A (zh) * | 2018-06-29 | 2018-12-18 | 北京金山安全软件有限公司 | 一种程序日志记录获取方法、装置及电子设备 |
CN109522209A (zh) * | 2018-09-29 | 2019-03-26 | 中国平安人寿保险股份有限公司 | 日志堆栈信息分析方法及装置、计算机装置及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN117435385B (zh) | 2024-02-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107967122B (zh) | 一种块设备的数据写入方法、装置及介质 | |
CN110727597B (zh) | 一种基于日志排查无效代码补全用例的方法 | |
US20130110785A1 (en) | System and method for backing up test data | |
KR20100107453A (ko) | 1회 기록 메모리 디바이스와 다수 회 기록 메모리 디바이스를 포함하는 컴퓨터용 스토리지 서브 시스템 및 관련 방법 | |
US7216207B1 (en) | System and method for fast, secure removal of objects from disk storage | |
US20190042367A1 (en) | Method and apparatus for processing failure of cipher change of ciphertext in database | |
JP4298700B2 (ja) | 電子文書を検査し保存するための方法およびコンピュータ読取り可能記録媒体 | |
CN114005476A (zh) | 闪存器、闪存擦写计数方法、电子设备及计算机存储介质 | |
CN114155906A (zh) | 一种数据块修复方法、装置、设备及存储介质 | |
CN117435385B (zh) | 一种日志记录方法、装置及电子设备和存储介质 | |
WO2019037587A1 (zh) | 一种数据恢复方法及装置 | |
US7617374B2 (en) | Hard disk testing method under extensible firmware interface | |
US9009430B2 (en) | Restoration of data from a backup storage volume | |
US7085086B2 (en) | Apparatus and method for reducing errors in writing to a storage medium | |
CN116795712A (zh) | 反向调试方法、调试方法、计算设备及存储介质 | |
CN107632880B (zh) | 导出excel数据的方法、存储介质及电子设备 | |
CN114564456B (zh) | 分布式存储文件的恢复方法及装置 | |
CN111367710A (zh) | 一种eMMC问题还原方法和装置 | |
JP2005352535A (ja) | データを保護する方法 | |
CN112463042B (zh) | 一种数据卷导入数据校验方法、装置、终端及存储介质 | |
CN114595096A (zh) | 数据库热备份的方法、装置、电子设备及存储介质 | |
JP2010256944A (ja) | Nand型フラッシュメモリ保守装置及びnand型フラッシュメモリ保守プログラム及びnand型フラッシュメモリ保守方法 | |
CN109508446B (zh) | 一种日志处理方法和装置 | |
Kuts et al. | Deleted Data Recovery on Solid-State Drives by Software Based Methods | |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |