CN110764945B - 一种崩溃日志处理方法、装置、设备和存储介质 - Google Patents

一种崩溃日志处理方法、装置、设备和存储介质 Download PDF

Info

Publication number
CN110764945B
CN110764945B CN201911013646.2A CN201911013646A CN110764945B CN 110764945 B CN110764945 B CN 110764945B CN 201911013646 A CN201911013646 A CN 201911013646A CN 110764945 B CN110764945 B CN 110764945B
Authority
CN
China
Prior art keywords
crash
target
file
log
crash log
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
CN201911013646.2A
Other languages
English (en)
Other versions
CN110764945A (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.)
Beijing Bo Hongyuan Data Polytron Technologies Inc
Original Assignee
Beijing Bo Hongyuan Data Polytron Technologies Inc
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 Beijing Bo Hongyuan Data Polytron Technologies Inc filed Critical Beijing Bo Hongyuan Data Polytron Technologies Inc
Priority to CN201911013646.2A priority Critical patent/CN110764945B/zh
Publication of CN110764945A publication Critical patent/CN110764945A/zh
Application granted granted Critical
Publication of CN110764945B publication Critical patent/CN110764945B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • 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/0787Storage of error reports, e.g. persistent data storage, storage using memory protection
    • YGENERAL 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
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE 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/00Energy 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)
  • Debugging And Monitoring (AREA)

Abstract

本发明公开了一种崩溃日志处理方法、装置、设备和存储介质。其中,方法包括:获取目标用户使用目标应用程序客户端的过程中生成的崩溃日志;获取与目标应用程序客户端的版本信息匹配的符号文件;对崩溃日志进行条目拆分,得到至少一个崩溃日志单一条目;获取与至少一个崩溃日志单一条目对应的实际崩溃地址和崩溃基址;解析符号文件,得到与目标应用程序客户端匹配的符号表和属性记录格式调试信息;根据与各崩溃日志单一条目对应的实际崩溃地址和崩溃基址,以及与目标应用程序客户端匹配的符号表和属性记录格式调试信息,输出崩溃日志的符号化解析结果。本发明实施例可以在Linux系统的服务器上准确地对崩溃日志进行函数符号解析。

Description

一种崩溃日志处理方法、装置、设备和存储介质
技术领域
本发明实施例涉及计算机技术领域,尤其涉及一种崩溃日志处理方法、装置、设备和存储介质。
背景技术
应用程序客户端崩溃是应用程序运行过程中出现的最为严重的问题,会导致服务突然中断,用户体验受损严重。因此,对于应用程序客户端崩溃的监测和分析就显得十分重要。根据用户使用应用程序客户端时产生的崩溃日志,获取到应用程序客户端崩溃的函数内存地址,结合符号文件进行函数符号解析,还原应用程序客户端崩溃时的函数调用堆栈,并以此为依据,有目的、有针对的修复应用程序客户端出现的问题。
现有技术中,针对iOS系统的应用程序客户端,有以下两种函数符号解析方式:通过苹果官方atos工具对崩溃日志进行函数符号解析;通过Facebook atosl工具对崩溃日志进行函数符号解析。
第一种方式的缺点是:atos是苹果提供的官方解析工具,预装在MacOS系统中并且只能在MacOS系统中运行,而服务器系统更多选择的是稳定、开源、灵活的Linux系统,而且面对企业量级的崩溃日志解析,在MacOS上部署解析系统成本高,性能差,不现实。第二种方式的缺点是:使用atosl工具,对于某些特定崩溃类型的日志进行函数符号解析会产生乱码,解析失败,程序报错,行号解析错乱等问题,而且atosl工具写于2013年,并且不再维护,无法对2014年推出的Swift开发语言编写的iOS系统的应用程序客户端所产生的崩溃日志进行正确的符号化解析,无法精准还原函数符号的准确名称与参数信息。
发明内容
本发明实施例提供一种崩溃日志处理方法、装置、设备和存储介质,以实现对现有的崩溃日志处理方法进行优化,能够在Linux系统的服务器上准确地进行函数符号解析。
第一方面,本发明实施例提供了一种崩溃日志处理方法,包括:
获取目标用户使用目标应用程序客户端的过程中生成的崩溃日志;
获取与目标应用程序客户端的版本信息匹配的符号文件;
对崩溃日志进行条目拆分,得到至少一个崩溃日志单一条目;
获取与至少一个崩溃日志单一条目对应的实际崩溃地址和崩溃基址;
解析符号文件,得到与目标应用程序客户端匹配的符号表和属性记录格式调试信息;
根据与各崩溃日志单一条目对应的实际崩溃地址和崩溃基址,以及与目标应用程序客户端匹配的符号表和属性记录格式调试信息,输出崩溃日志的符号化解析结果。
第二方面,本发明实施例还提供了一种崩溃日志处理装置,包括:
崩溃日志获取模块,用于获取目标用户使用目标应用程序客户端的过程中生成的崩溃日志;
符号文件获取模块,用于获取与目标应用程序客户端的版本信息匹配的符号文件;
日志拆分模块,用于对崩溃日志进行条目拆分,得到至少一个崩溃日志单一条目;
地址获取模块,用于获取与至少一个崩溃日志单一条目对应的实际崩溃地址和崩溃基址;
调试信息获取模块,用于解析符号文件,得到与目标应用程序客户端匹配的符号表和属性记录格式调试信息;
结果输出模块,用于根据与各崩溃日志单一条目对应的实际崩溃地址和崩溃基址,以及与目标应用程序客户端匹配的符号表和属性记录格式调试信息,输出崩溃日志的符号化解析结果。
第三方面,本发明实施例还提供了一种计算机设备,包括:
一个或多个处理器;
存储器,用于存储一个或多个程序;
当一个或多个程序被一个或多个处理器执行,使得一个或多个处理器实现如本发明实施例所述的崩溃日志处理方法。
第四方面,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如本发明实施例所述的崩溃日志处理方法。
本发明实施例的技术方案,通过对标用户使用目标应用程序客户端的过程中生成的崩溃日志进行条目拆分,得到至少一个崩溃日志单一条目,然后解析与目标应用程序客户端的版本信息匹配的符号文件,得到与目标应用程序客户端匹配的符号表和属性记录格式调试信息,根据与各崩溃日志单一条目对应的实际崩溃地址和崩溃基址,以及与目标应用程序客户端匹配的符号表和属性记录格式调试信息,输出崩溃日志的符号化解析结果,该崩溃日志处理方法可以在Linux平台部署,可以根据实际崩溃地址和崩溃基址,以及与目标应用程序客户端匹配的符号表和属性记录格式调试信息,在Linux系统的服务器上准确地对崩溃日志进行函数符号解析。
附图说明
图1为本发明实施例一提供的一种崩溃日志处理方法的流程图;
图2为本发明实施例二提供的一种崩溃日志处理方法的流程图;
图3为本发明实施例三提供的一种崩溃日志处理方法的流程图;
图4为本发明实施例四提供的一种崩溃日志处理装置的结构示意图;
图5为本发明实施例五提供的一种计算机设备的结构示意图。
具体实施方式
下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。
另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部内容。在更加详细地讨论示例性实施例之前应当提到的是,一些示例性实施例被描述成作为流程图描绘的处理或方法。虽然流程图将各项操作(或步骤)描述成顺序的处理,但是其中的许多操作可以被并行地、并发地或者同时实施。此外,各项操作的顺序可以被重新安排。当其操作完成时所述处理可以被终止,但是还可以具有未包括在附图中的附加步骤。所述处理可以对应于方法、函数、规程、子例程、子程序等等。
实施例一
图1为本发明实施例一提供的一种崩溃日志处理方法的流程图。本实施例可适用于对目标应用程序客户端的崩溃日志进行处理的情况,该方法可以由本发明实施例提供的崩溃日志处理装置来执行,该装置可采用软件和/或硬件的方式实现,并一般可集成在计算机设备中。例如,服务器。如图1所示,本实施例的方法具体包括:
步骤101、获取目标用户使用目标应用程序客户端的过程中生成的崩溃日志。
其中,崩溃日志是由终端设备的操作系统(IOS系统)在应用程序客户端出现异常而崩溃后记录的日志文件。崩溃日志中通常记录的是十六进制的内存地址(也称原始信息),其对应唯一的通用唯一识别码(Universally Unique工dentifier,UUID)。崩溃日志对应的UUID可以为与其对应的应用程序客户端的UUID。
可选的,获取目标用户使用目标应用程序客户端的过程中生成的崩溃日志,可以包括:通过嵌入至目标应用程序客户端中的崩溃检测探针,获取目标用户使用目标应用程序客户端的过程中生成的崩溃日志。
当目标应用程序客户端发生崩溃时,会自动回传崩溃日志到目标应用程序客户端的服务器。
可选的,获取目标用户使用目标应用程序客户端的过程中生成的崩溃日志,可以包括:获取目标用户上传的使用目标应用程序客户端的过程中生成的崩溃日志。
所有应用程序客户端产生崩溃后,崩溃日志都会记录在目标用户使用的终端设备中。目标用户可以手动上传使用目标应用程序客户端的过程中生成的崩溃日志。
步骤102、获取与目标应用程序客户端的版本信息匹配的符号文件。
可选的,目标应用程序客户端的服务器可以根据目标应用程序客户端的UUID,获取与目标应用程序客户端的版本信息匹配的符号文件(dSYM文件),即获取目标应用程序客户端的上线版本编译产生的dSYM文件。dSYM文件由目标应用程序客户端的开发人员事先手动上传至服务器。
步骤103、对崩溃日志进行条目拆分,得到至少一个崩溃日志单一条目。
其中,对崩溃日志可以包含多个崩溃日志条目。一个崩溃日志条目对应一次应用程序客户端崩溃记录。目标应用程序客户端的服务器对崩溃日志进行条目拆分,得到至少一个崩溃日志单一条目。
步骤104、获取与至少一个崩溃日志单一条目对应的实际崩溃地址和崩溃基址。
其中,目标应用程序客户端的服务器获取与各崩溃日志单一条目对应的实际崩溃地址和崩溃基址。
可选的,实际崩溃地址为崩溃日志中记录的目标应用程序客户端发生崩溃时的十六进制的内存地址。崩溃基址为基本地址,是相对偏移量的计算基准,通常可以用来确定定址。崩溃基址是一种静态的指针变量的地址,在一个版本的应用操作系统中保持不变。根据实际崩溃地址和崩溃基址,可以计算符号表中与崩溃日志单一条目匹配的十六进制的内存地址。
步骤105、解析符号文件,得到与目标应用程序客户端匹配的符号表和属性记录格式调试信息。
可选的,解析dSYM文件对应的Mach-O文件,得到dSYM文件中的符号表(SymbolTable)、属性记录DWARF格式调试信息、文件虚拟地址以及文件UUID等信息。
步骤106、根据与各崩溃日志单一条目对应的实际崩溃地址和崩溃基址,以及与目标应用程序客户端匹配的符号表和属性记录格式调试信息,输出崩溃日志的符号化解析结果。
可选的,根据与各崩溃日志单一条目对应的实际崩溃地址和崩溃基址,以及与目标应用程序客户端匹配的符号表和属性记录格式调试信息,得到崩溃日志的符号化解析结果,可以包括:根据与各崩溃日志单一条目对应的实际崩溃地址和崩溃基址,在与目标应用程序客户端匹配的符号表中获取与各崩溃日志单一条目对应的目标函数的函数名称;根据函数名称,以及与目标应用程序客户端匹配的属性记录格式调试信息,获取调用目标函数的目标文件和目标行号;根据函数名称,目标文件的文件名称以及目标行号,输出与各崩溃日志单一条目对应的符号化解析结果。
可选的,根据函数名称,以及与目标应用程序客户端匹配的属性记录格式调试信息,获取调用所述目标函数的目标文件和目标行号,可以包括:根据函数名称,判断属性记录格式调试信息的核心信息部分中是否存在与目标函数对应的子例程信息;若是,则获取与目标函数对应的第一条子例程信息,并根据第一条子例程信息,获取调用目标函数的目标文件和目标行号;若否,则根据属性记录格式调试信息的行对应关系部分,获取调用目标函数的目标文件和目标行号。
可选的,根据函数名称,目标文件的文件名称以及目标行号,输出与各崩溃日志单一条目对应的符号化解析结果,可以包括:判断与函数名称对应的语言是否为C++语言或者SWIFT语言;若是,则调用对应的函数名称重整工具对函数名称进行重整,将函数名称重整为对应的语言可阅读的函数名称;根据重整后的函数名称,目标文件的文件名称以及目标行号,输出与各崩溃日志单一条目对应的符号化解析结果。
本发明实施例提供了一种崩溃日志处理方法,通过对标用户使用目标应用程序客户端的过程中生成的崩溃日志进行条目拆分,得到至少一个崩溃日志单一条目,然后解析与目标应用程序客户端的版本信息匹配的符号文件,得到与目标应用程序客户端匹配的符号表和属性记录格式调试信息,根据与各崩溃日志单一条目对应的实际崩溃地址和崩溃基址,以及与目标应用程序客户端匹配的符号表和属性记录格式调试信息,输出崩溃日志的符号化解析结果,该崩溃日志处理方法可以在Linux平台部署,可以根据实际崩溃地址和崩溃基址,以及与目标应用程序客户端匹配的符号表和属性记录格式调试信息,在Linux系统的服务器上准确地对崩溃日志进行函数符号解析。
实施例二
图2为本发明实施例二提供的一种崩溃日志处理方法的流程图。本实施例可以与上述一个或者多个实施例中各个可选方案结合,在本实施例中,根据与各崩溃日志单一条目对应的实际崩溃地址和崩溃基址,以及与目标应用程序客户端匹配的符号表和属性记录格式调试信息,得到崩溃日志的符号化解析结果,可以包括:根据与各崩溃日志单一条目对应的实际崩溃地址和崩溃基址,在与目标应用程序客户端匹配的符号表中获取与各崩溃日志单一条目对应的目标函数的函数名称;根据函数名称,以及与目标应用程序客户端匹配的属性记录格式调试信息,获取调用目标函数的目标文件和目标行号;根据函数名称,目标文件的文件名称以及目标行号,输出与各崩溃日志单一条目对应的符号化解析结果。
如图2所示,本实施例的方法具体包括:
步骤201、获取目标用户使用目标应用程序客户端的过程中生成的崩溃日志。
步骤202、获取与目标应用程序客户端的版本信息匹配的符号文件。
步骤203、对崩溃日志进行条目拆分,得到至少一个崩溃日志单一条目。
步骤204、获取与至少一个崩溃日志单一条目对应的实际崩溃地址和崩溃基址。
步骤205、解析符号文件,得到与目标应用程序客户端匹配的符号表和属性记录格式调试信息。
步骤206、根据与各崩溃日志单一条目对应的实际崩溃地址和崩溃基址,在与目标应用程序客户端匹配的符号表中获取与各崩溃日志单一条目对应的目标函数的函数名称。
其中,符号表用于记录十六进制的内存地址与应用程序客户端对应的源代码中的函数名称的对应关系。
可选的,针对每一个崩溃日志单一条目,计算与崩溃日志单一条目对应的实际崩溃地址和崩溃基址的差值,得到一个十六进制的内存地址;在与目标应用程序客户端匹配的符号表中查询所得到的十六进制的内存地址;在符号表中查询到所得到的十六进制的内存地址后,获取与所得到的十六进制的内存地址对应的函数名称作为与崩溃日志单一条目对应的目标函数的函数名称。
步骤207、根据函数名称,以及与目标应用程序客户端匹配的属性记录格式调试信息,获取调用目标函数的目标文件和目标行号。
可选的,根据函数名称,判断属性记录DWARF格式调试信息的核心信息debug_info部分中是否存在与目标函数对应的子例程信息;若是,则获取与目标函数对应的第一条子例程信息,并根据第一条子例程信息,获取调用目标函数的目标文件和目标行号;若否,则根据属性记录DWARF格式调试信息的行对应关系debug_line部分,获取调用目标函数的目标文件和目标行号。
步骤208、根据函数名称,目标文件的文件名称以及目标行号,输出与各崩溃日志单一条目对应的符号化解析结果。
可选的,判断与函数名称对应的语言是否为C++语言或者SWIFT语言;若是,则调用对应的函数名称重整工具对函数名称进行重整,将函数名称重整为对应的语言可阅读的函数名称;根据重整后的函数名称,目标文件的文件名称以及目标行号,输出与各崩溃日志单一条目对应的符号化解析结果;若否,则直接根据函数名称,目标文件的文件名称以及目标行号,输出与各崩溃日志单一条目对应的符号化解析结果。
本发明实施例提供了一种崩溃日志处理方法,通过根据与各崩溃日志单一条目对应的实际崩溃地址和崩溃基址,在与目标应用程序客户端匹配的符号表中获取与各崩溃日志单一条目对应的目标函数的函数名称,然后根据函数名称,以及与目标应用程序客户端匹配的属性记录格式调试信息,获取调用目标函数的目标文件和目标行号,根据函数名称,目标文件的文件名称以及目标行号,输出与各崩溃日志单一条目对应的符号化解析结果,可以根据实际崩溃地址和崩溃基址,以及与目标应用程序客户端匹配的符号表和属性记录格式调试信息,准确地对崩溃日志进行函数符号解析,准确解析函数名称、函数所在的文件与行号。
实施例三
图3为本发明实施例三提供的一种崩溃日志处理方法的流程图。本实施例可以与上述一个或者多个实施例中各个可选方案结合,在本实施例中,根据函数名称,以及与目标应用程序客户端匹配的属性记录格式调试信息,获取调用目标函数的目标文件和目标行号,可以包括:根据函数名称,判断属性记录格式调试信息的核心信息部分中是否存在与目标函数对应的子例程信息;若是,则获取与目标函数对应的第一条子例程信息,并根据第一条子例程信息,获取调用目标函数的目标文件和目标行号;若否,则根据属性记录格式调试信息的行对应关系部分,获取调用目标函数的目标文件和目标行号。
以及,根据函数名称,目标文件的文件名称以及目标行号,输出与各崩溃日志单一条目对应的符号化解析结果,可以包括:判断与函数名称对应的语言是否为C++语言或者SWIFT语言;若是,则调用对应的函数名称重整工具对函数名称进行重整,将函数名称重整为对应的语言可阅读的函数名称;根据重整后的函数名称,目标文件的文件名称以及目标行号,输出与各崩溃日志单一条目对应的符号化解析结果。
如图3所示,本实施例的方法具体包括:
步骤301、获取目标用户使用目标应用程序客户端的过程中生成的崩溃日志。
步骤302、获取与目标应用程序客户端的版本信息匹配的符号文件。
步骤303、对崩溃日志进行条目拆分,得到至少一个崩溃日志单一条目。
步骤304、获取与至少一个崩溃日志单一条目对应的实际崩溃地址和崩溃基址。
步骤305、解析符号文件,得到与目标应用程序客户端匹配的符号表和属性记录格式调试信息。
步骤306、根据与各崩溃日志单一条目对应的实际崩溃地址和崩溃基址,在与目标应用程序客户端匹配的符号表中获取与各崩溃日志单一条目对应的目标函数的函数名称。
步骤307、根据函数名称,判断属性记录格式调试信息的核心信息部分中是否存在与目标函数对应的子例程信息:若是,则执行步骤308;若否,则执行步骤309。
根据函数名称,判断属性记录DWARF格式调试信息的核心信息debug_info部分中是否存在与目标函数对应的子例程信息。
步骤308、获取与目标函数对应的第一条子例程信息,并根据第一条子例程信息,获取调用目标函数的目标文件和目标行号。
如果属性记录DWARF格式调试信息的核心信息debug_info部分中存在与目标函数对应的子例程信息,则获取与目标函数对应的第一条子例程信息,并根据第一条子例程信息,获取调用目标函数的目标文件和目标行号。
DWARF格式调试信息的debug_info部分基本包含了一个源文件内部的大部分信息,如函数、参数、变量、类型等。
步骤309、根据属性记录格式调试信息的行对应关系部分,获取调用目标函数的目标文件和目标行号。
如果属性记录DWARF格式调试信息的核心信息debug_info部分中不存在与目标函数对应的子例程信息,则根据属性记录DWARF格式调试信息的行对应关系debug_line部分,获取调用目标函数的目标文件和目标行号。
DWARF格式调试信息的debug_line部分包含了所有地址和源文件行的对应信息。
步骤310、判断与函数名称对应的语言是否为C++语言或者SWIFT语言:若是,则执行步骤311;若否,则执行步骤313。
步骤311、调用对应的函数名称重整工具对函数名称进行重整,将函数名称重整为对应的语言可阅读的函数名称。
可选的,如果确定与函数名称对应的语言为C++语言,则调用对应的函数名称重整工具对函数名称进行重整,将函数名称重整为C++语言可阅读的函数名称。
可选的,如果确定与函数名称对应的语言为SWIFT语言,则调用对应的函数名称重整工具对函数名称进行重整,将函数名称重整为SWIFT语言可阅读的函数名称。
步骤312、根据重整后的函数名称,目标文件的文件名称以及目标行号,输出与各崩溃日志单一条目对应的符号化解析结果。
可选的,拼接完整的重整后的函数名称,目标文件的文件名称以及目标行号,输出与各崩溃日志单一条目对应的符号化解析结果。
步骤313、根据函数名称,目标文件的文件名称以及目标行号,输出与各崩溃日志单一条目对应的符号化解析结果。
如果与函数名称对应的语言不是C++语言或者SWIFT语言,则直接拼接完整的函数名称,目标文件的文件名称以及目标行号,输出与各崩溃日志单一条目对应的符号化解析结果。
本发明实施例提供了一种崩溃日志处理方法,通过判断属性记录格式调试信息的核心信息部分中是否存在与目标函数对应的子例程信息;若是,则获取与目标函数对应的第一条子例程信息,并根据第一条子例程信息,获取调用目标函数的目标文件和目标行号;若否,则根据属性记录格式调试信息的行对应关系部分,获取调用目标函数的目标文件和目标行号,以及判断与函数名称对应的语言是否为C++语言或者SWIFT语言;若是,则调用对应的函数名称重整工具对函数名称进行重整,将函数名称重整为对应的语言可阅读的函数名称,根据重整后的函数名称,目标文件的文件名称以及目标行号,输出与各崩溃日志单一条目对应的符号化解析结果,可以根据函数名称,以及属性记录格式调试信息,准确的获取调用函数的文件和行号,可以对多种语言的函数名称进行重整,将函数名称重整为对应语言的开发者便于理解的函数名称。
实施例四
图4为本发明实施例四提供的一种崩溃日志处理装置的结构示意图。如图4所示,所述装置可以配置于计算机设备,包括:崩溃日志获取模块401、符号文件获取模块402、日志拆分模块403、地址获取模块404、调试信息获取模块405以及结果输出模块406。
其中,崩溃日志获取模块401,用于获取目标用户使用目标应用程序客户端的过程中生成的崩溃日志;符号文件获取模块402,用于获取与目标应用程序客户端的版本信息匹配的符号文件;日志拆分模块403,用于对崩溃日志进行条目拆分,得到至少一个崩溃日志单一条目;地址获取模块404,用于获取与至少一个崩溃日志单一条目对应的实际崩溃地址和崩溃基址;调试信息获取模块405,用于解析符号文件,得到与目标应用程序客户端匹配的符号表和属性记录格式调试信息;结果输出模块406,用于根据与各崩溃日志单一条目对应的实际崩溃地址和崩溃基址,以及与目标应用程序客户端匹配的符号表和属性记录格式调试信息,输出崩溃日志的符号化解析结果。
本发明实施例提供了一种崩溃日志处理装置,通过对标用户使用目标应用程序客户端的过程中生成的崩溃日志进行条目拆分,得到至少一个崩溃日志单一条目,然后解析与目标应用程序客户端的版本信息匹配的符号文件,得到与目标应用程序客户端匹配的符号表和属性记录格式调试信息,根据与各崩溃日志单一条目对应的实际崩溃地址和崩溃基址,以及与目标应用程序客户端匹配的符号表和属性记录格式调试信息,输出崩溃日志的符号化解析结果,该崩溃日志处理方法可以在Linux平台部署,可以根据实际崩溃地址和崩溃基址,以及与目标应用程序客户端匹配的符号表和属性记录格式调试信息,在Linux系统的服务器上准确地对崩溃日志进行函数符号解析。
在上述各实施例的基础上,结果输出模块406可以包括:第一获取单元,用于根据与各崩溃日志单一条目对应的实际崩溃地址和崩溃基址,在与目标应用程序客户端匹配的符号表中获取与各崩溃日志单一条目对应的目标函数的函数名称;第二获取单元,用于根据函数名称,以及与目标应用程序客户端匹配的属性记录格式调试信息,获取调用目标函数的目标文件和目标行号;结果输出单元,用于根据函数名称,目标文件的文件名称以及目标行号,输出与各崩溃日志单一条目对应的符号化解析结果。
在上述各实施例的基础上,第二获取单元可以包括:第一判断子单元,用于根据函数名称,判断属性记录格式调试信息的核心信息部分中是否存在与目标函数对应的子例程信息;第一获取子单元,用于若是,则获取与目标函数对应的第一条子例程信息,并根据第一条子例程信息,获取调用目标函数的目标文件和目标行号;第二获取子单元,用于若否,则根据属性记录格式调试信息的行对应关系部分,获取调用目标函数的目标文件和目标行号。
在上述各实施例的基础上,结果输出单元可以包括:第二判断子单元,用于判断与函数名称对应的语言是否为C++语言或者SWIFT语言;名称重整子单元,用于若是,则调用对应的函数名称重整工具对函数名称进行重整,将函数名称重整为对应的语言可阅读的函数名称;结果输出子单元,用于根据重整后的函数名称,目标文件的文件名称以及目标行号,输出与各崩溃日志单一条目对应的符号化解析结果。
在上述各实施例的基础上,崩溃日志获取模块401可以包括:第一获取单元,用于通过嵌入至目标应用程序客户端中的崩溃检测探针,获取目标用户使用目标应用程序客户端的过程中生成的崩溃日志。
在上述各实施例的基础上,崩溃日志获取模块401可以包括:第二获取单元,用于获取目标用户上传的使用目标应用程序客户端的过程中生成的崩溃日志。
上述崩溃日志处理装置可执行本发明任意实施例所提供的崩溃日志处理方法,具备执行崩溃日志处理方法相应的功能模块和有益效果。
实施例五
图5为本发明实施例五提供的一种计算机设备的结构示意图。图5示出了适于用来实现本发明实施方式的示例性计算机设备12的框图。图5显示的计算机设备12仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图5所示,计算机设备12以通用计算机设备的形式表现。计算机设备12的组件可以包括但不限于:一个或者多个处理器16,存储器28,连接不同系统组件(包括存储器28和处理器16)的总线18。处理器16包括但不限于AI处理器。
总线18表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器,外围总线,图形加速端口,处理器或者使用多种总线结构中的任意总线结构的局域总线。举例来说,这些体系结构包括但不限于工业标准体系结构(ISA)总线,微通道体系结构(MAC)总线,增强型ISA总线、视频电子标准协会(VESA)局域总线以及外围组件互连(PCI)总线。
计算机设备12典型地包括多种计算机系统可读介质。这些介质可以是任何能够被计算机设备12访问的可用介质,包括易失性和非易失性介质,可移动的和不可移动的介质。
存储器28可以包括易失性存储器形式的计算机系统可读介质,例如随机存取存储器(RAM)30和/或高速缓存存储器32。计算机设备12可以进一步包括其它可移动/不可移动的、易失性/非易失性计算机系统存储介质。仅作为举例,存储系统34可以用于读写不可移动的、非易失性磁介质(图5未显示,通常称为“硬盘驱动器”)。尽管图5中未示出,可以提供用于对可移动非易失性磁盘(例如“软盘”)读写的磁盘驱动器,以及对可移动非易失性光盘(例如CD-ROM,DVD-ROM或者其它光介质)读写的光盘驱动器。在这些情况下,每个驱动器可以通过一个或者多个数据介质接口与总线18相连。存储器28可以包括至少一个程序产品,该程序产品具有一组(例如至少一个)程序模块,这些程序模块被配置以执行本发明各实施例的功能。
具有一组(至少一个)程序模块42的程序/实用工具40,可以存储在例如存储器28中,这样的程序模块42包括——但不限于——操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。程序模块42通常执行本发明所描述的实施例中的功能和/或方法。
计算机设备12也可以与一个或多个外部设备14(例如键盘、指向设备、显示器24等)通信,还可与一个或者多个使得用户能与该计算机设备12交互的设备通信,和/或与使得该计算机设备12能与一个或多个其它计算设备进行通信的任何设备(例如网卡,调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口22进行。并且,计算机设备12还可以通过网络适配器20与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器20通过总线18与计算机设备12的其它模块通信。应当明白,尽管图5中未示出,可以结合计算机设备12使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
计算机设备12的处理器16通过运行存储在存储器28中的程序,从而执行各种功能应用以及数据处理,例如实现本发明实施例所提供的崩溃日志处理方法。该方法具体可以包括:获取目标用户使用目标应用程序客户端的过程中生成的崩溃日志;获取与目标应用程序客户端的版本信息匹配的符号文件;对崩溃日志进行条目拆分,得到至少一个崩溃日志单一条目;获取与至少一个崩溃日志单一条目对应的实际崩溃地址和崩溃基址;解析符号文件,得到与目标应用程序客户端匹配的符号表和属性记录格式调试信息;根据与各崩溃日志单一条目对应的实际崩溃地址和崩溃基址,以及与目标应用程序客户端匹配的符号表和属性记录格式调试信息,输出崩溃日志的符号化解析结果。
实施例六
本发明实施例六还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现本发明实施例所提供的崩溃日志处理方法。该方法具体可以包括:获取目标用户使用目标应用程序客户端的过程中生成的崩溃日志;获取与目标应用程序客户端的版本信息匹配的符号文件;对崩溃日志进行条目拆分,得到至少一个崩溃日志单一条目;获取与至少一个崩溃日志单一条目对应的实际崩溃地址和崩溃基址;解析符号文件,得到与目标应用程序客户端匹配的符号表和属性记录格式调试信息;根据与各崩溃日志单一条目对应的实际崩溃地址和崩溃基址,以及与目标应用程序客户端匹配的符号表和属性记录格式调试信息,输出崩溃日志的符号化解析结果。
本发明实施例的计算机存储介质,可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括——但不限于无线、电线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言或其组合来编写用于执行本发明操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++、Ruby、Go,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言,以及AI算法的计算机语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。

Claims (7)

1.一种崩溃日志处理方法,其特征在于,包括:
获取目标用户使用目标应用程序客户端的过程中生成的崩溃日志;
获取与所述目标应用程序客户端的版本信息匹配的符号文件;
对所述崩溃日志进行条目拆分,得到至少一个崩溃日志单一条目;
获取与所述至少一个崩溃日志单一条目对应的实际崩溃地址和崩溃基址;
解析所述符号文件,得到与所述目标应用程序客户端匹配的符号表和属性记录格式调试信息;
根据与各崩溃日志单一条目对应的实际崩溃地址和崩溃基址,以及与所述目标应用程序客户端匹配的符号表和属性记录格式调试信息,输出所述崩溃日志的符号化解析结果;
所述根据与各崩溃日志单一条目对应的实际崩溃地址和崩溃基址,以及与所述目标应用程序客户端匹配的符号表和属性记录格式调试信息,得到所述崩溃日志的符号化解析结果,包括:
根据与各崩溃日志单一条目对应的实际崩溃地址和崩溃基址,在与所述目标应用程序客户端匹配的符号表中获取与所述各崩溃日志单一条目对应的目标函数的函数名称;
根据所述函数名称,判断所述属性记录格式调试信息的核心信息部分中是否存在与所述目标函数对应的子例程信息;
若是,则获取与所述目标函数对应的第一条子例程信息,并根据所述第一条子例程信息,获取调用所述目标函数的目标文件和目标行号;
若否,则根据所述属性记录格式调试信息的行对应关系部分,获取调用所述目标函数的目标文件和目标行号;
根据所述函数名称,所述目标文件的文件名称以及所述目标行号,输出与各崩溃日志单一条目对应的符号化解析结果。
2.根据权利要求1所述的方法,其特征在于,根据所述函数名称,所述目标文件的文件名称以及所述目标行号,输出与各崩溃日志单一条目对应的符号化解析结果,包括:
判断与所述函数名称对应的语言是否为C++语言或者SWIFT语言;
若是,则调用对应的函数名称重整工具对所述函数名称进行重整,将所述函数名称重整为对应的语言可阅读的函数名称;
根据重整后的函数名称,所述目标文件的文件名称以及所述目标行号,输出与各崩溃日志单一条目对应的符号化解析结果。
3.根据权利要求1所述的方法,其特征在于,获取目标用户使用目标应用程序客户端的过程中生成的崩溃日志,包括:
通过嵌入至所述目标应用程序客户端中的崩溃检测探针,获取目标用户使用目标应用程序客户端的过程中生成的崩溃日志。
4.根据权利要求1所述的方法,其特征在于,获取目标用户使用目标应用程序客户端的过程中生成的崩溃日志,包括:
获取目标用户上传的使用目标应用程序客户端的过程中生成的崩溃日志。
5.一种崩溃日志处理装置,其特征在于,包括:
崩溃日志获取模块,用于获取目标用户使用目标应用程序客户端的过程中生成的崩溃日志;
符号文件获取模块,用于获取与所述目标应用程序客户端的版本信息匹配的符号文件;
日志拆分模块,用于对所述崩溃日志进行条目拆分,得到至少一个崩溃日志单一条目;
地址获取模块,用于获取与所述至少一个崩溃日志单一条目对应的实际崩溃地址和崩溃基址;
调试信息获取模块,用于解析所述符号文件,得到与所述目标应用程序客户端匹配的符号表和属性记录格式调试信息;
结果输出模块,用于根据与各崩溃日志单一条目对应的实际崩溃地址和崩溃基址,以及与所述目标应用程序客户端匹配的符号表和属性记录格式调试信息,输出所述崩溃日志的符号化解析结果;
所述结果输出模块包括:
第一获取单元,用于根据与各崩溃日志单一条目对应的实际崩溃地址和崩溃基址,在与所述目标应用程序客户端匹配的符号表中获取与所述各崩溃日志单一条目对应的目标函数的函数名称;
第二获取单元,包括:第一判断子单元,用于根据函数名称,判断属性记录格式调试信息的核心信息部分中是否存在与目标函数对应的子例程信息;第一获取子单元,用于若是,则获取与目标函数对应的第一条子例程信息,并根据第一条子例程信息,获取调用目标函数的目标文件和目标行号;第二获取子单元,用于若否,则根据属性记录格式调试信息的行对应关系部分,获取调用目标函数的目标文件和目标行号;
结果输出单元,用于根据所述函数名称,所述目标文件的文件名称以及所述目标行号,输出与各崩溃日志单一条目对应的符号化解析结果。
6.一种计算机设备,其特征在于,包括:
一个或多个处理器;
存储器,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-4任一所述的崩溃日志处理方法。
7.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现如权利要求1-4任一所述的崩溃日志处理方法。
CN201911013646.2A 2019-10-23 2019-10-23 一种崩溃日志处理方法、装置、设备和存储介质 Active CN110764945B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201911013646.2A CN110764945B (zh) 2019-10-23 2019-10-23 一种崩溃日志处理方法、装置、设备和存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201911013646.2A CN110764945B (zh) 2019-10-23 2019-10-23 一种崩溃日志处理方法、装置、设备和存储介质

Publications (2)

Publication Number Publication Date
CN110764945A CN110764945A (zh) 2020-02-07
CN110764945B true CN110764945B (zh) 2023-06-30

Family

ID=69333417

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201911013646.2A Active CN110764945B (zh) 2019-10-23 2019-10-23 一种崩溃日志处理方法、装置、设备和存储介质

Country Status (1)

Country Link
CN (1) CN110764945B (zh)

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111258803B (zh) * 2020-02-12 2023-03-28 北京字节跳动网络技术有限公司 崩溃定位方法、装置及电子设备
CN111367799B (zh) * 2020-02-28 2024-05-07 同盾控股有限公司 定位源代码崩溃位置的方法、装置、介质及电子设备
CN111538638A (zh) * 2020-04-28 2020-08-14 北京思特奇信息技术股份有限公司 一种iOS端应用程序性能的监控方法和装置
CN111782504B (zh) * 2020-05-20 2023-12-01 车智互联(北京)科技有限公司 一种应用程序异常的诊断方法、移动终端及可读存储介质
CN111899731A (zh) * 2020-06-16 2020-11-06 北京百度网讯科技有限公司 语音功能的稳定性测试方法、装置、设备和计算机存储介质
CN112035354A (zh) * 2020-08-28 2020-12-04 北京指掌易科技有限公司 风险代码的定位方法、装置、设备及存储介质
CN112346900B (zh) * 2020-11-10 2023-09-01 广州虎牙科技有限公司 符号表的下载控制、堆栈解析方法、装置、设备及介质
CN112764761A (zh) * 2021-01-27 2021-05-07 武汉斗鱼鱼乐网络科技有限公司 一种程序中断文件解析方法、存储介质、电子设备及系统
CN112768046A (zh) * 2021-01-27 2021-05-07 深圳市智莱科技股份有限公司 数据处理方法、医疗管理系统和终端
CN112965942A (zh) * 2021-03-29 2021-06-15 深圳市广和通无线股份有限公司 内存转储文件解析方法、装置、设备及计算机存储介质
CN113342563A (zh) * 2021-04-27 2021-09-03 武汉深之度科技有限公司 程序运行错误时定位源代码的方法、装置及计算设备
CN113176989A (zh) * 2021-05-27 2021-07-27 北京字节跳动网络技术有限公司 日志文件的解析方法、装置、设备及存储介质
CN114840400A (zh) * 2022-04-14 2022-08-02 北京字节跳动网络技术有限公司 异常组件的识别方法、装置、设备、存储介质及程序产品
CN115408344B (zh) * 2022-09-29 2023-12-08 建信金融科技有限责任公司 日志格式化方法、装置、电子设备及存储介质

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8719791B1 (en) * 2012-05-31 2014-05-06 Google Inc. Display of aggregated stack traces in a source code viewer
CN104516732A (zh) * 2013-09-29 2015-04-15 北京新媒传信科技有限公司 一种应用程序崩溃报告方法和系统
CN106547782A (zh) * 2015-09-22 2017-03-29 阿里巴巴集团控股有限公司 日志信息的获取方法及装置
CN108334515A (zh) * 2017-01-20 2018-07-27 阿里巴巴集团控股有限公司 一种处理崩溃文件中堆栈地址的方法、装置及系统
CN109032909A (zh) * 2018-07-18 2018-12-18 携程旅游信息技术(上海)有限公司 应用程序崩溃日志的处理方法、系统、设备和存储介质
CN109669795A (zh) * 2018-12-14 2019-04-23 麒麟合盛网络技术股份有限公司 崩溃信息处理方法及装置

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8631390B2 (en) * 2010-04-02 2014-01-14 Apple Inc. Archiving a build product

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8719791B1 (en) * 2012-05-31 2014-05-06 Google Inc. Display of aggregated stack traces in a source code viewer
CN104516732A (zh) * 2013-09-29 2015-04-15 北京新媒传信科技有限公司 一种应用程序崩溃报告方法和系统
CN106547782A (zh) * 2015-09-22 2017-03-29 阿里巴巴集团控股有限公司 日志信息的获取方法及装置
CN108334515A (zh) * 2017-01-20 2018-07-27 阿里巴巴集团控股有限公司 一种处理崩溃文件中堆栈地址的方法、装置及系统
CN109032909A (zh) * 2018-07-18 2018-12-18 携程旅游信息技术(上海)有限公司 应用程序崩溃日志的处理方法、系统、设备和存储介质
CN109669795A (zh) * 2018-12-14 2019-04-23 麒麟合盛网络技术股份有限公司 崩溃信息处理方法及装置

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
面向嵌入式系统的多核调试工具研究与实现;李鹏程;《中国优秀硕士学位论文全文数据库 信息科技辑》;20180215(第2期);第I138-274页 *

Also Published As

Publication number Publication date
CN110764945A (zh) 2020-02-07

Similar Documents

Publication Publication Date Title
CN110764945B (zh) 一种崩溃日志处理方法、装置、设备和存储介质
US8527950B2 (en) Verification of software applications
CN110989926B (zh) 故障磁盘槽位定位方法、装置及电子设备
CN111241111B (zh) 数据查询方法及装置、数据对比方法及装置、介质及设备
CN107193747B (zh) 代码测试方法、装置和计算机设备
CN110659210A (zh) 一种信息获取方法、装置、电子设备及存储介质
CN110597704B (zh) 应用程序的压力测试方法、装置、服务器和介质
CN111258803B (zh) 崩溃定位方法、装置及电子设备
CN110716843B (zh) 系统故障分析处理方法、装置、存储介质及电子设备
CN112416775A (zh) 基于人工智能的软件自动化测试方法、装置及电子设备
CN111274130A (zh) 一种自动化测试方法、装置、设备及存储介质
CN108595332B (zh) 软件测试方法及装置
CN111309606A (zh) 页面异常处理方法、装置、计算机设备及存储介质
CN110888641A (zh) 一种脚本自动生成方法、装置、服务器及存储介质
CN113342431B (zh) 函数调用栈回溯、程序异常处理方法、装置、设备及介质
US20100306745A1 (en) Efficient Code Instrumentation
CN112748930B (zh) 编译检测方法、装置、设备及存储介质
CN113986263A (zh) 代码自动化测试方法、装置、电子设备、存储介质
CN113656301A (zh) 一种接口测试方法、装置、设备及存储介质
CN113760696A (zh) 一种程序问题定位方法、装置、电子设备和存储介质
CN111026715A (zh) 数据处理方法及装置、计算机存储介质及电子设备
CN111338956A (zh) 一种自动化的压测方法、装置、设备和存储介质
CN112988593B (zh) 代码分析方法、装置、计算机设备及存储介质
CN110806981A (zh) 一种应用程序测试方法、装置、设备和存储介质
CN116820946B (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