CN114816816A - 崩溃堆栈信息处理方法、装置、设备及存储介质 - Google Patents

崩溃堆栈信息处理方法、装置、设备及存储介质 Download PDF

Info

Publication number
CN114816816A
CN114816816A CN202210383836.9A CN202210383836A CN114816816A CN 114816816 A CN114816816 A CN 114816816A CN 202210383836 A CN202210383836 A CN 202210383836A CN 114816816 A CN114816816 A CN 114816816A
Authority
CN
China
Prior art keywords
information
target
dynamic library
target dynamic
compressed image
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
Application number
CN202210383836.9A
Other languages
English (en)
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.)
Ruiting Network Technology Shanghai Co ltd
Original Assignee
Ruiting Network Technology Shanghai Co 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 Ruiting Network Technology Shanghai Co ltd filed Critical Ruiting Network Technology Shanghai Co ltd
Priority to CN202210383836.9A priority Critical patent/CN114816816A/zh
Publication of CN114816816A publication Critical patent/CN114816816A/zh
Pending legal-status Critical Current

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/0793Remedial or corrective actions
    • 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/0706Error 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 the processing taking place on a specific hardware platform or in a specific software environment
    • G06F11/0715Error 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 the processing taking place on a specific hardware platform or in a specific software environment in a system implementing multitasking
    • 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/0706Error 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 the processing taking place on a specific hardware platform or in a specific software environment
    • G06F11/073Error 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 the processing taking place on a specific hardware platform or in a specific software environment in a memory management context, e.g. virtual memory or cache 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)
  • Stored Programmes (AREA)

Abstract

本申请实施例提供一种崩溃堆栈信息处理方法、装置、设备及存储介质。在本申请实施例中,根据终端设备的系统信息可以判断本地是否存在目标动态库;若不存在,可以下载目标应用对应的包含目标动态库的固件安装包,从安装包中提取目标动态库;之后对目标动态库进行符号化处理,得到包含与目标动态库中的二进制代码对应的内存地址范围和可读性代码信息的符号化信息表,之后参照符号化信息表中包含的内存地址范围和可读性代码信息,从中确定与崩溃堆栈信息中包含的内存地址对应的可读性代码信息,并将其作为问题代码信息,解决目前无法正常解析因调用目标动态库产生的崩溃堆栈信息的问题,进而提高对崩溃堆栈信息的解析效率和成功率。

Description

崩溃堆栈信息处理方法、装置、设备及存储介质
技术领域
本申请涉及计算机技术领域,尤其涉及一种崩溃堆栈信息处理方法、装置、设备及存储介质。
背景技术
基于IOS开发的应用程序(简称为IOS应用)在运行过程中可能发生crash(程序崩溃)的情况,导致无法正常使用IOS应用。例如,终端设备在调用动态库过程中可能产生crash,并会将调用动态库产生的crash堆栈信息上报至服务端设备,由服务端设备对调用动态库产生的crash堆栈信息进行解析,进而促使开发人员基于该解析结果对IOS应用的代码进一步完善。
其中,服务端设备对调用动态库产生的crash堆栈信息进行解析需要依赖所调用对应版本的动态库信息,动态库版本与IOS固件版本对应,不同固件版本依赖的动态库有所不同。但是,IOS固件版本的数量非常多,从IOS10~IOS14固件版本的数量大于50个,并且不少用户使用beta(测试)版本,涉及的固件版本的数量会更多,实际应用中服务端设备可能无法存储所有版本的动态库,从而导致无法正常解析因调用动态库而产生的crash堆栈信息。
发明内容
本申请的多个方面提供一种崩溃堆栈信息处理方法、装置、设备及存储介质,用以解决无法正常解析因调用动态库产生的崩溃堆栈信息的问题,提高对崩溃堆栈信息的解析效率和成功率。
本申请实施例提供一种崩溃堆栈信息处理方法,包括:获取终端设备在运行目标应用期间产生的崩溃堆栈信息和终端设备的系统信息,系统信息指向目标动态库,崩溃堆栈信息是在目标应用加载目标动态库中二进制代码的过程中产生的,包含指向被加载的二进制代码的内存地址;若根据系统信息确定本地不存在目标动态库,则下载目标应用对应的包含目标动态库的固件安装包,并从固件安装包中提取目标动态库;对目标动态库进行符号化处理,得到符号化信息表,符号化信息表中包含与目标动态库中的二进制代码对应的内存地址范围和可读性代码信息;根据符号化信息表中包含的内存地址范围和可读性代码信息,结合崩溃堆栈信息中包含的内存地址,定位崩溃堆栈信息对应的可读性代码信息作为问题代码信息。
本申请实施例还提供一种崩溃堆栈信息处理装置,包括:获取模块,用于获取终端设备在运行目标应用期间产生的崩溃堆栈信息和终端设备的系统信息,系统信息指向目标动态库,崩溃堆栈信息是在目标应用加载目标动态库中二进制代码的过程中产生的,包含指向被加载的二进制代码的内存地址;提取模块,用于若根据系统信息确定本地不存在目标动态库,则下载目标应用对应的包含目标动态库的固件安装包,并从固件安装包中提取目标动态库;符号化处理模块,用于对目标动态库进行符号化处理,得到符号化信息表,符号化信息表中包含与目标动态库中的二进制代码对应的内存地址范围和可读性代码信息;定位模块,用于根据符号化信息表中包含的内存地址范围和可读性代码信息,结合崩溃堆栈信息中包含的内存地址,定位崩溃堆栈信息对应的可读性代码信息作为问题代码信息。
本申请实施例还提供一种计算机设备,包括:存储器和处理器;其中,存储器,用于存储计算机程序;处理器耦合至存储器,用于执行计算机程序以用于执行以上所述方法中的步骤。
本申请各实施例提供的技术方案,针对终端设备在运行目标应用期间因调用动态库而产生的崩溃堆栈信息,根据终端设备的系统信息可以判断本地是否存在目标动态库;若不存在,可以下载目标应用对应的包含目标动态库的固件安装包,从安装包中提取目标动态库;之后对目标动态库进行符号化处理,得到包含与目标动态库中的二进制代码对应的内存地址范围和可读性代码信息的符号化信息表,之后参照符号化信息表中包含的内存地址范围和可读性代码信息,从中确定与崩溃堆栈信息中包含的内存地址对应的可读性代码信息,并将其作为问题代码信息,解决目前无法正常解析因调用目标动态库产生的崩溃堆栈信息的问题,进而提高对崩溃堆栈信息的解析效率和成功率。
进一步,在本申请实施例中,由于不再将所有版本的动态库预先下载并存储在用于解析崩溃堆栈信息的设备本地,而是在需要的时候才会按需下载,这样会节省磁盘存储空间,降低了存储成本。更进一步,在本申请实施例中,采用对目标动态库进行符号化处理的方式,进而基于符号化信息表中包含的内存地址范围和可读性代码信息确定与崩溃堆栈信息中包含的内存地址对应的可读性代码信息,基于符号化的方式,可提高确定问题代码信息的效率和准确率。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1为本申请一示例性实施例提供的崩溃堆栈信息处理系统的结构示意图;
图2为本申请一示例性实施例提供的崩溃堆栈信息处理方法的流程示意图;
图3为本申请一示例性实施例提供的崩溃堆栈信息处理装置的结构示意图;
图4为本申请一示例性实施例提供的计算机设备的结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请实施例提供一种解决方案,针对目标应用在终端设备上运行过程中由于调用目标动态库发生崩溃而产生的崩溃堆栈信息,根据终端设备的系统信息判断本地是否存在目标动态库,若不存在,则下载目标应用对应的包含目标动态库的固件安装包,并从固件安装包中提取目标动态库,对目标动态库进行符号化处理,得到符号化信息表;若存在,则对本地存在的目标动态库进行符号化处理,得到符号化信息表;之后根据符号化信息表中包含的信息定位崩溃堆栈信息对应的可读性代码信息作为问题代码信息,解决现有无法解析因调用目标动态库产生的崩溃堆栈信息的技术问题,进而提高对崩溃堆栈信息的解析效率和成功率。
以下结合附图,详细说明本申请各实施例提供的技术方案。
如图1所示崩溃堆栈信息处理系统,包括:终端设备11、服务端设备12和开发端设备13;终端设备11上运行目标应用,目标应用在运行期间若发生崩溃情况会产生崩溃堆栈信息,终端设备11将该崩溃堆栈信息发送给目标应用对应的服务端设备12,服务端设备12执行下述图2所示实施例描述的崩溃堆栈信息处理方法,从而定位崩溃堆栈信息对应的可读性代码信息作为问题代码信息。由于目标应用在运行过程中产生崩溃的原因有多种,例如,可能是因调用了存在问题的动态库代码(例如存在漏洞的动态库代码)、或者是因为系统原因导致运行环境异常等。其中,动态库代码存在问题,与动态库代码的编写过程有关,因此可对因调用动态库代码产生的崩溃堆栈信息进行解析,定位出动态库代码中的问题代码信息,将定位出的问题代码信息发送给开发端设备13,由开发端设备13侧的开发人员修正动态库代码中存在的问题。在动态库代码存在的问题得以修正后,开发端设备13将修正后的动态库代码更新到终端设备11上的目标应用,以便于目标应用在后续运行过程中能够调用正常化的动态库代码,提高目标应用的运行质量。
需要说明的是,修正后的动态库代码可由开发端设备13直接更新至各终端设备上的目标应用中,也可以将服务端设备12作为更新媒介,通过服务端设备12将修正后的动态库代码更新至各终端设备上的目标应用中。例如,开发端设备13可以以补丁方式或者插件方式或者版本更新方式对外发布修正后的动态库代码至官方网站或服务端设备12上,由终端设备从官方网站或服务端设备12上下载修正后的动态库代码,并替换掉本地已有动态库代码,完成动态库代码的更新过程。在前述示例中,以单独更新动态库代码为例进行说明,但并不限于此。例如,也可以将修正后的动态库代码更新至最新版本的固件安装包中,将最新版本的固件安装包发布至官方网站或服务端设备12上,由终端设备从官方网站或服务端设备12上下载最新版本的固件安装包,并利用最新版本的固件安装包覆盖掉已有版本的固件安装包,完成目标应用的更新迭代,与此同时也会完成动态库代码的更新。
在图1中,崩溃堆栈信息处理方法的执行主体以目标应用对应的服务端设备12为例,但是该崩溃堆栈信息处理方法的执行主体还可以是不同于服务端设备12的其它计算机设备,例如,还可以是第三方的服务器。下面结合图2所示方法流程对本申请实施例提供的崩溃堆栈信息处理方法进行详细说明。
图2为本申请一示例性实施例提供的崩溃堆栈信息处理方法的流程示意图。如图2所示,该方法包括:
101、获取终端设备在运行目标应用期间产生的崩溃堆栈信息和终端设备的系统信息,系统信息指向目标动态库,崩溃堆栈信息是在目标应用加载目标动态库中二进制代码的过程中产生的,包含指向被加载的二进制代码的内存地址;
102、若根据系统信息确定本地不存在目标动态库,则下载目标应用对应的包含目标动态库的固件安装包,并从固件安装包中提取目标动态库;
103、对目标动态库进行符号化处理,得到符号化信息表,符号化信息表中包含与目标动态库中的二进制代码对应的内存地址范围和可读性代码信息;
104、根据符号化信息表中包含的内存地址范围和可读性代码信息,结合崩溃堆栈信息中包含的内存地址,定位崩溃堆栈信息对应的可读性代码信息作为问题代码信息。
终端设备上可以运行目标应用,在运行过程中,可能会因为各种原因发生崩溃(crash)现象。无论是何种原因引发的crash问题,都会产生堆栈崩溃信息。本申请实施例对终端设备的类型不作限定,例如,是智能手机、笔记本电脑或台式电脑等。另外,对目标应用的类型也不作限定,例如,游戏类应用、金融类应用、房产类应用,房产类可以是租售房应用、看房应用等。
发生crash问题之后,需要定位发生crash的原因,以便于进一步完善目标应用的代码实现和功能逻辑。其中,一种崩溃情况是由于加载动态库引起的,动态库又称动态链接库(Dynamic Link Library,简称DLL),DLL是一个包含可由多个程序同时使用的代码和数据的库,DLL不是可执行文件。DLL提供了一种方法,使进程可以调用不属于其可执行代码的函数。该DLL包含一个或多个已被编译、链接并与使用它们的进程分开存储的函数。DLL还有助于共享数据和资源,多个应用程序可同时访问内存中单个DLL副本的内容。本申请实施例对动态库的种类不作限定,例如,Mach-O Dynamic Library(DYLIB)和Framework。这些动态库中的函数或代码是预先编写的,且动态库会根据终端设备的系统版本的不同而有所不同。
本申请实施例针对终端设备在运行目标应用期间由于加载动态库引起的崩溃情况,提供一种崩溃堆栈信息处理方法,该方法应用于不同于终端设备的其它计算机设备,例如图1所示系统中的服务端设备12。目标应用在运行过程中,需要加载目标动态库中的二进制代码,若在加载目标动态库中二进制代码的过程中产生崩溃的情况,则会产生崩溃堆栈信息,也就是说,本申请实施例中的崩溃堆栈信息是指在目标应用加载目标动态库中二进制代码的过程中产生的,且该崩溃堆栈信息包含指向被加载的二进制代码的内存地址。在本实施例中,目标应用所在终端设备会将产生的崩溃堆栈信息以及终端设备的系统信息上报给该方法的执行主体,即不同于终端设备的其它计算机设备,例如目标应用对应的服务端设备。其中,终端设备的系统信息会指向导致终端设备产生该崩溃堆栈信息的目标动态库,终端的系统信息可以是其使用的操作系统的版本信息,也可以是其所使用的IOS固件的版本信息,其中,操作系统的版本与IOS固件版本之间具有一定对应关系,在一定程度上会决定可以使用的IOS固件版本的信息。当然,终端设备的系统信息除了包括上述信息之外,还可以包括硬件环境信息,例如CPU硬件型号、存储器型号等。需要说明的是,终端设备的系统信息不同,例如在使用不同版本的操作系统时,所需的动态库的版本也会有所不同,也就是说,终端设备所使用的动态库的版本信息是由终端设备的系统信息决定,不同版本的操作系统,指示终端设备使用不同版本的动态库。
在本实施例中,为了确定导致上述目标应用崩溃的问题所在,可基于崩溃堆栈信息确定被加载的二进制代码的内存地址,根据被加载的二进制代码的内存地址确定存在问题的二进制代码。具体地,一方面获取终端设备在运行目标应用期间产生的崩溃堆栈信息,另一方面获取终端设备的系统信息,首先根据终端设备的系统信息确定本地是否存在目标动态库。
在本实施例中,可通过以下方式判断本地是否存在目标动态库:根据终端设备的系统信息确定目标动态库对应的目标版本信息;将目标版本信息与本地已有各动态库的版本信息进行匹配;若未匹配到目标版本信息对应的动态库,确定本地不存在目标动态库;若匹配到目标版本信息对应的动态库,确定本地存在目标动态库。其中,目标动态库也就是与目标版本信息对应的动态库。
可选地,根据系统信息确定目标动态库对应的目标版本信息,可通过以下方式实现:根据终端设备的系统信息,查询预先维护的系统信息与动态库版本之间的映射关系表,确定该系统信息所对应的动态库版本信息,将该动态库版本信息作为目标版本信息。在确定了目标版本信息后,将目标版本信息在本地已有各动态库的版本信息中进行匹配,为了便于理解,将各动态库的版本信息用大写英文字母表示,例如,目标版本信息为A,那么需要在本地已有各动态库的版本信息中寻找是否包含版本信息A,若包含,则在本地已有各动态库的版本信息中可以匹配到与目标版本信息相同的版本信息,若不包含,则在本地已有各动态库的版本信息中匹配不到与目标版本信息相同的版本信息。
进一步地,若根据系统信息确定本地不存在目标动态库,则按需下载目标应用对应的包含目标动态库的固件安装包,并从固件安装包中提取目标动态库。
在一可选实施例中,下载目标应用对应的包含目标动态库的固件安装包,可以通过以下方式实现:从目标应用对应的官方网站或应用服务器,获取包含目标动态库的固件安装包的下载地址;根据下载地址,从目标应用对应的官方网站或应用服务器下载包含目标动态库的固件安装包。可选地,从目标应用对应的官方网站或应用服务器,获取包含目标动态库的固件安装包的下载地址,可以通过以下方式实现:向目标应用对应的官方网站或应用服务器发送数据请求,其中,数据请求中携带有目标应用的标识信息,标识信息可以包括目标应用的名称,进一步还可以包含目标应用的版本信息;根据目标应用的标识信息,确定对应的固件安装包,该固件安装包括目标应用所依赖的目标动态库;从系统所维护的各固件安装包的下载地址中,获取与目标应用对应的固件安装包的下载地址,并返回给该方法的执行主体,例如服务端设备。以获取“某看房”安装包的下载地址为例,首先向“某看房”应用对应的官方网站或应用服务器发送包含有该应用的名称和版本信息的数据请求,然后根据“某看房”应用的名称或版本信息,确定对应的安装包,然后从系统维护的众多安装包的下载地址中,获取与某看房”应用安装包对应的下载地址。在获取到下载地址之后,可以根据该下载地址下载目标应用对应的包含目标动态库的固件安装包。
在一可选实施例中,固件安装包通常是经过压缩的,包含多个压缩镜像文件,基于此,从固件安装包中提取目标动态库,可以通过以下方式实现:对固件安装包进行解压缩,得到多个压缩镜像文件,压缩镜像文件是由特定的一系列文件按照一定的格式制作成单一的压缩文件,其可以被特定的软件识别并可直接刻录到光盘上,以方便用户下载和使用,并且压缩镜像文件无需解压就可以在终端设备运行,例如,MAC设备上的dmg压缩镜像文件,可以在MAC设备上直接加载运行。多个压缩镜像文件被存储在指定存储设备中,本实施例对指定存储设备的种类不作限定,例如可以是MongoDB数据库。多个压缩镜像文件具有不同的属性信息,属性信息至少包括文件及其对应子文件的名称、类型、占据存储空间的大小等信息。在得到多个压缩镜像文件之后,可根据多个压缩镜像文件的属性信息,从中选择目标动态库所在的目标压缩镜像文件,并加载指定存储设备上的目标压缩镜像文件,从加载的目标压缩镜像文件中提取目标动态库。其中,MongoDB是基于分布式文件存储的数据库,旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB是介于关系数据库和非关系数据库之间的数据库产品,是非关系数据库当中功能最丰富的数据库。它支持的数据结构比较广泛,因此可以存储比较复杂的数据类型,不仅可以实现关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
在一可选实施例中,在属性信息为压缩镜像文件占据存储空间的大小时,则根据多个压缩镜像文件的属性信息,从中选择目标动态库所在的目标压缩镜像文件,可以通过以下方式实现:从多个压缩镜像文件中,选择占据存储空间最大的压缩镜像文件作为目标动态库所在的目标压缩镜像文件。在一些应用场景下,例如jpg场景,动态库的压缩镜像文件占用的空间最大。因此,在该场景下,占用空间最大的压缩镜像文件为动态库的压缩镜像文件,无需对压缩镜像文件进行解析,选择速度更快。但是选择目标动态库所在的目标压缩镜像文件的方式不限于此,例如也可以对各压缩镜像文件进行解析,获取解析后的各压缩镜像文件的名称、类型等信息,根据这些信息选择目标动态库所在的目标压缩镜像文件。
在本实施例中,虽然固件安装包中包含目标动态库,但是并不能直接根据目标动态库对崩溃堆栈信息进行解析,因此,在得到目标动态库之后,需要进一步解决如何基于目标动态库对崩溃堆栈信息进行解析的问题。在本实施例中,从固件安装包中提取到目标动态库后,继续步骤103,对目标动态库进行符号化处理,得到符号化信息表,符号化信息表中包含与目标动态库中的二进制代码对应的内存地址范围和可读性代码信息。符号化处理是一种程序分析技术,其可以通过分析程序来得到让特定代码区域执行的输入。使用符号化处理分析一个程序时,该程序会使用符号值作为输入,而非一般执行程序时使用的具体值。在得到目标代码时,分析器可以得到相应的路径约束,然后通过约束求解器来得到可以触发目标代码的具体值。在本申请实施例中,对目标动态库进行符号化处理的工具有多种,例如Xcode自带的符号化处理工具symbolicatecrash。Xcode是运行在操作系统MAC OS X上的集成开发工具(IDE),其是开发MACOS和IOS应用程序的最快捷的方式,具有统一的用户界面设计,编码、测试、调试都可在一个简单的窗口内完成。
在一可选实施例中,由于二进制代码不具有可读性,无法理解其具体含义,所以需要对二进制代码进行符号化处理,使其具有可读性。具体地,对目标动态库进行符号化处理,得到符号化信息表,可通过以下方式实现:对目标压缩镜像文件中包含的二进制代码进行反向切片处理,得到二进制代码对应的内存地址范围和可读性代码信息,以形成符号化信息表。通过对目标动态库进行符号化处理,可避免现有技术中通过固件提取动态库会产生大量无用信息的问题,从而节省了服务器的磁盘存储空间,降低了存储成本。其中,切片处理用来截取数组和字符串的一部分,切片处理包括正向切片处理和反向切片处理,下面以python为例,字符串名[起始:结束:步长](一般步长为1),可以输出从起始到结束前一步的内容,可表示为Str=['a','b','c'],当起始为0时,会按步长输出从第一个元素到结束元素前一个元素的所有内容;当起始和结束均为0时,会按步长输出所有串元素;当结束为0时,会按步长输出从开始元素到串末尾的所有内容;当步长<0时,就会输出异常的空集;将开始与结束序号交换后,便可以输出正确的结果。切片方向是以起始值的正负号来决定的,如果起始值为正,则称之为正向切片处理,切片方向从前向后切,如果起始值为负,则称之为反向切片处理,切片方向从后向前切,反之亦然。
在一可选实施例中,对目标压缩镜像文件中包含的二进制代码进行反向切片处理,得到二进制代码对应的内存地址范围和可读性代码信息,以形成符号化信息表,可通过以下方式实现:按照可执行文件格式,对目标压缩镜像文件进行结构解析,得到目标压缩镜像文件包含的头部信息、多个段信息以及每个段信息包含的多个区域信息,头部信息和每个区域信息分别包含目标压缩镜像文件中的部分二进制代码,在本实施例中,可执行文件格式可以有多种,例如可以是Mach-O文件格式,Mach-O可执行文件包括头部信息、多个段信息以及每个段信息包含的多个区域信息,其把一个或者多个属性相似的段合并成一个片段,在装载的时候就可以把多个属性相似的段当作整体进行映射(分页),从而可以减少页内碎片。之后利用符号化工具对头部信息、各段信息和各区域信息分别进行反向切片处理,得到头部信息、各段信息和各区域信息分别对应的内存起始地址和地址偏移,每个内存起始地址和地址偏移形成一个内存地址范围,并从头部信息、各段信息和各区域信息中解析出目标压缩镜像文件中包含的方法名和/或类名作为可读性代码信息,在本实施例中,目标镜像文件中包含的方法名、类名可分别单独作为可读性代码信息,或者一个方法名和对应的类别名同时作为可读性代码信息。之后根据头部信息、各段信息和各区域信息对应的内存地址范围,以及从头部信息、各段信息和各区域信息中解析出的方法名和/或类名,生成符号化信息表。通过对目标动态库进行符号化处理,可避免现有技术中通过固件提取动态库会产生大量无用信息的问题,从而节省了服务器的磁盘存储空间,降低了存储成本。
在上述实施例中,重点描述了在本地不存在目标动态库的情况下如何按需下载目标动态库并针对下载到的目标动态库进行符号化处理的过程。当然,若根据终端设备的系统信息确定本地存在目标动态库,则无需下载目标动态库,可以直接对本地存在的目标动态库进行符号化处理,得到符号化信息表。直接对本地存在的目标动态库进行符号化处理的过程与上述实施例中符号化处理的过程相同,在此不再赘述。
在本实施例中,在得到符号化信息表之后,可以根据符号化信息表中包含的内存地址范围和可读性代码信息,结合崩溃堆栈信息中包含的内存地址,定位到崩溃堆栈信息对应的可读性问题代码信息,可根据问题代码信息确定系统崩溃的类型及动态库中存在问题的代码,以便于对动态库中存在问题的代码进行修正,考虑到动态库属于IOS应用的一部分,因此可以达到对IOS应用进一步完善的目的。
在本实施例中,问题代码信息是用于描述出现的问题的代码信息,基于目标应用在运行过程中产生崩溃的原因不同,问题代码信息的种类也不相同,例如,目标应用在运行过程中因动态库代码存在问题产生崩溃时,问题代码信息为存在问题的动态库代码;目标应用在运行过程中因系统原因导致运行环境异常而产生崩溃时,问题代码信息为描述系统问题的代码。上述目标应用在运行过程中产生崩溃的原因及相应的问题代码信息的种类仅为示例性说明,并不限于此。
进一步,在定位出问题代码信息后,可基于问题代码信息对出现的问题进行修正,修正的实施方式可以如下:在问题代码信息为存在问题的动态库代码时,服务端设备将存在问题的动态库代码发送给开发端设备,由开发端设备侧的开发人员修正动态代码库中存在的问题,在动态代码库存在的问题得以修正后,开发端设备将修正后的动态代码重新更新到终端设备上的目标应用,以便于目标应用在后续运行过程中能够调用正常化的动态库代码,提高目标应用的运行质量。在问题代码信息为描述系统问题的代码时,服务端设备将描述系统问题的代码发送给开发端设备,由开发端设备侧的开发人员根据描述系统问题的代码信息对系统存在的问题进行修正,在系统存在的问题得以修正后,开发端将修正后的系统重新更新到终端设备上,以便于目标应用可以在健全的系统环境中正常运行,提高系统的运行质量。
本申请各实施例提供的技术方案,针对终端设备在运行目标应用期间因调用动态库而产生的崩溃堆栈信息,根据终端设备的系统信息可以判断本地是否存在目标动态库;若不存在,可以下载目标应用对应的包含目标动态库的固件安装包,从安装包中提取目标动态库;之后对目标动态库进行符号化处理,得到包含与目标动态库中的二进制代码对应的内存地址范围和可读性代码信息的符号化信息表,之后参照符号化信息表中包含的内存地址范围和可读性代码信息,从中确定与崩溃堆栈信息中包含的内存地址对应的可读性代码信息,并将其作为问题代码信息,解决现有无法正常解析因调用目标动态库产生的崩溃堆栈信息的问题,进而提高对崩溃堆栈信息的解析效率和成功率。
进一步,在本申请实施例中,由于不再将所有版本的动态库下载并存储在用于解析崩溃堆栈信息的设备本地,而是在需要的时候按需下载,这样会节省用于解析崩溃堆栈信息的设备磁盘存储空间,降低了存储成本。更进一步地,在本申请实施例中,采用对目标动态库进行符号化处理的方式,进而基于符号化信息表中包含的内存地址范围和可读性代码信息确定与崩溃堆栈信息中包含的内存地址对应的可读性代码信息,基于符号化的方式,可提高确定问题代码信息的效率和准确率。
图3为本申请一示例性实施例提供的崩溃堆栈信息处理装置的结构示意图。如图3所示,该装置包括:
获取模块31,用于获取终端设备在运行目标应用期间产生的崩溃堆栈信息和所述终端设备的系统信息,所述系统信息指向目标动态库,所述崩溃堆栈信息是在所述目标应用加载所述目标动态库中二进制代码的过程中产生的,包含指向被加载的二进制代码的内存地址;
提取模块32,用于若根据所述系统信息确定本地不存在所述目标动态库,则下载所述目标应用对应的包含所述目标动态库的固件安装包,并从所述固件安装包中提取所述目标动态库;
符号化处理模块33,用于对所述目标动态库进行符号化处理,得到符号化信息表,所述符号化信息表中包含与所述目标动态库中的二进制代码对应的内存地址范围和可读性代码信息;
定位模块34,用于根据所述符号化信息表中包含的内存地址范围和可读性代码信息,结合所述崩溃堆栈信息中包含的内存地址,定位所述崩溃堆栈信息对应的可读性代码信息作为问题代码信息。
进一步地,提取模块32在用于从所述固件安装包中提取所述目标动态库时,具体用于:对所述固件安装包进行解压缩,得到多个压缩镜像文件,所述多个压缩镜像文件被存储在指定存储设备上,所述多个压缩镜像文件具有不同的属性信息;根据所述多个压缩镜像文件的属性信息,从中选择所述目标动态库所在的目标压缩镜像文件,并加载所述指定存储设备上的所述目标压缩镜像文件。
进一步地,所述属性信息为所述压缩镜像文件占据存储空间的大小,则提取模块32,在用于根据所述多个压缩镜像文件的属性信息,从中选择所述目标动态库所在的目标压缩镜像文件时,具体用于:从所述多个压缩镜像文件中,选择占据存储空间最大的压缩镜像文件作为所述目标动态库所在的目标压缩镜像文件。
进一步地,符号化处理模块33在用于对所述目标动态库进行符号化处理,得到符号化信息表时,具体用于:对所述目标压缩镜像文件中包含的二进制代码进行反向切片处理,得到所述二进制代码对应的内存地址范围和可读性代码信息,以形成所述符号化信息表。
进一步地,符号化处理模块33在用于对所述目标压缩镜像文件中包含的二进制代码进行反向切片处理,得到所述二进制代码对应的内存地址范围和可读性代码信息,以形成所述符号化信息表时,具体用于:按照可执行文件格式,对所述目标压缩镜像文件进行结构解析,得到所述目标压缩镜像文件包含的头部信息、多个段信息以及每个段信息包含的多个区域信息,所述头部信息和每个区域信息分别包含所述目标压缩镜像文件中的部分二进制代码;利用符号化工具对所述头部信息、各段信息和各区域信息分别进行反向切片处理,得到所述头部信息、各段信息和各区域信息分别对应的内存起始地址和地址偏移,每个内存起始地址和地址偏移形成一个内存地址范围,并从所述头部信息、各段信息和各区域信息中解析出所述目标压缩镜像文件中包含的方法名和/或类名作为可读性代码信息;根据所述头部信息、各段信息和各区域信息对应的内存地址范围,以及从所述头部信息、各段信息和各区域信息中解析出的方法名和/或类名,生成所述符号化信息表。
进一步地,符号化处理模块33还用于:若根据所述系统信息确定本地存在所述目标动态库,则对本地存在的所述目标动态库进行符号化处理,得到符号化信息表。
进一步地,提取模块32还用于:根据所述系统信息确定所述目标动态库对应的目标版本信息;将所述目标版本信息在本地已有各动态库的版本信息中进行匹配;若未匹配到所述目标版本信息,确定本地不存在所述目标动态库;若匹配到所述目标版本信息,确定本地存在所述目标动态库。
进一步地,提取模块32在用于下载所述目标应用对应的包含所述目标动态库的固件安装包时,具体用于:从所述目标应用对应的官方网站或应用服务器,获取包含所述目标动态库的固件安装包的下载地址;根据所述下载地址,从所述目标应用对应的官方网站或应用服务器下载包含所述目标动态库的固件安装包。
关于本申请实施例中上述各模块或单元具体实现的原理以及各步骤的详细实施方式可参见上文中相同或相应步骤的描述,在此不再赘述。
图4为本申请一示例性实施例提供的计算机设备的结构示意图。如图4所示,该计算机设备包括:存储器40a和处理器40b;其中,存储器40a,用于存储计算机程序;处理器40b耦合至存储器40a,用于执行计算机程序以用于执行以下步骤:
获取终端设备在运行目标应用期间产生的崩溃堆栈信息和所述终端设备的系统信息,所述系统信息指向目标动态库,所述崩溃堆栈信息是在所述目标应用加载所述目标动态库中二进制代码的过程中产生的,包含指向被加载的二进制代码的内存地址;
若根据所述系统信息确定本地不存在所述目标动态库,则下载所述目标应用对应的包含所述目标动态库的固件安装包,并从所述固件安装包中提取所述目标动态库;
对所述目标动态库进行符号化处理,得到符号化信息表,所述符号化信息表中包含与所述目标动态库中的二进制代码对应的内存地址范围和可读性代码信息;
根据所述符号化信息表中包含的内存地址范围和可读性代码信息,结合所述崩溃堆栈信息中包含的内存地址,定位所述崩溃堆栈信息对应的可读性代码信息作为问题代码信息。
进一步地,处理器40b在用于从所述固件安装包中提取所述目标动态库时,具体用于:对所述固件安装包进行解压缩,得到多个压缩镜像文件,所述多个压缩镜像文件被存储在指定存储设备上,所述多个压缩镜像文件具有不同的属性信息;根据所述多个压缩镜像文件的属性信息,从中选择所述目标动态库所在的目标压缩镜像文件,并加载所述指定存储设备上的所述目标压缩镜像文件。
进一步地,所述属性信息为所述压缩镜像文件占据存储空间的大小,则处理器40b在用于根据所述多个压缩镜像文件的属性信息,从中选择所述目标动态库所在的目标压缩镜像文件时,具体用于:从所述多个压缩镜像文件中,选择占据存储空间最大的压缩镜像文件作为所述目标动态库所在的目标压缩镜像文件。
进一步地,处理器40b在用于对所述目标动态库进行符号化处理,得到符号化信息表时,具体用于:对所述目标压缩镜像文件中包含的二进制代码进行反向切片处理,得到所述二进制代码对应的内存地址范围和可读性代码信息,以形成所述符号化信息表。
进一步地,处理器40b在用于对所述目标压缩镜像文件中包含的二进制代码进行反向切片处理,得到所述二进制代码对应的内存地址范围和可读性代码信息,以形成所述符号化信息表时,具体用于:按照可执行文件格式,对所述目标压缩镜像文件进行结构解析,得到所述目标压缩镜像文件包含的头部信息、多个段信息以及每个段信息包含的多个区域信息,所述头部信息和每个区域信息分别包含所述目标压缩镜像文件中的部分二进制代码;利用符号化工具对所述头部信息、各段信息和各区域信息分别进行反向切片处理,得到所述头部信息、各段信息和各区域信息分别对应的内存起始地址和地址偏移,每个内存起始地址和地址偏移形成一个内存地址范围,并从所述头部信息、各段信息和各区域信息中解析出所述目标压缩镜像文件中包含的方法名和/或类名作为可读性代码信息;根据所述头部信息、各段信息和各区域信息对应的内存地址范围,以及从所述头部信息、各段信息和各区域信息中解析出的方法名和/或类名,生成所述符号化信息表。
进一步地,处理器40b还用于:若根据所述系统信息确定本地存在所述目标动态库,则对本地存在的所述目标动态库进行符号化处理,得到符号化信息表。
进一步地,处理器40b还用于:根据所述系统信息确定所述目标动态库对应的目标版本信息;将所述目标版本信息在本地已有各动态库的版本信息中进行匹配;若未匹配到所述目标版本信息,确定本地不存在所述目标动态库;若匹配到所述目标版本信息,确定本地存在所述目标动态库。
进一步地,处理器40b在用于下载所述目标应用对应的包含所述目标动态库的固件安装包时,具体用于:从所述目标应用对应的官方网站或应用服务器,获取包含所述目标动态库的固件安装包的下载地址;根据所述下载地址,从所述目标应用对应的官方网站或应用服务器下载包含所述目标动态库的固件安装包。
进一步,如图4所示,该计算机设备还包括:显示器40c、通信组件40d、电源组件40e、音频组件40f等其它组件。图4中仅示意性给出部分组件,并不意味着电子终端只包括图4所示组件。本实施例的电子终端可以实现为台式电脑、笔记本电脑、智能手机或IOT设备等终端设备。
关于本申请实施例中上述各模块或单元具体实现的原理以及各步骤的详细实施方式可参见上文中相同或相应步骤的描述,在此不再赘述。
本申请一示例性实施例还提供了存储有计算机程序的计算机可读存储介质,当计算机程序被处理器执行时,致使处理器能够实现以下步骤:
获取终端设备在运行目标应用期间产生的崩溃堆栈信息和所述终端设备的系统信息,所述系统信息指向目标动态库,所述崩溃堆栈信息是在所述目标应用加载所述目标动态库中二进制代码的过程中产生的,包含指向被加载的二进制代码的内存地址;
若根据所述系统信息确定本地不存在所述目标动态库,则下载所述目标应用对应的包含所述目标动态库的固件安装包,并从所述固件安装包中提取所述目标动态库;
对所述目标动态库进行符号化处理,得到符号化信息表,所述符号化信息表中包含与所述目标动态库中的二进制代码对应的内存地址范围和可读性代码信息;
根据所述符号化信息表中包含的内存地址范围和可读性代码信息,结合所述崩溃堆栈信息中包含的内存地址,定位所述崩溃堆栈信息对应的可读性代码信息作为问题代码信息。
进一步地,处理器在用于从所述固件安装包中提取所述目标动态库时,具体用于:对所述固件安装包进行解压缩,得到多个压缩镜像文件,所述多个压缩镜像文件被存储在指定存储设备上,所述多个压缩镜像文件具有不同的属性信息;根据所述多个压缩镜像文件的属性信息,从中选择所述目标动态库所在的目标压缩镜像文件,并加载所述指定存储设备上的所述目标压缩镜像文件。
进一步地,所述属性信息为所述压缩镜像文件占据存储空间的大小,则处理器在用于根据所述多个压缩镜像文件的属性信息,从中选择所述目标动态库所在的目标压缩镜像文件时,具体用于:从所述多个压缩镜像文件中,选择占据存储空间最大的压缩镜像文件作为所述目标动态库所在的目标压缩镜像文件。
进一步地,处理器在用于对所述目标动态库进行符号化处理,得到符号化信息表时,具体用于:对所述目标压缩镜像文件中包含的二进制代码进行反向切片处理,得到所述二进制代码对应的内存地址范围和可读性代码信息,以形成所述符号化信息表。
进一步地,处理器在用于对所述目标压缩镜像文件中包含的二进制代码进行反向切片处理,得到所述二进制代码对应的内存地址范围和可读性代码信息,以形成所述符号化信息表时,具体用于:按照可执行文件格式,对所述目标压缩镜像文件进行结构解析,得到所述目标压缩镜像文件包含的头部信息、多个段信息以及每个段信息包含的多个区域信息,所述头部信息和每个区域信息分别包含所述目标压缩镜像文件中的部分二进制代码;利用符号化工具对所述头部信息、各段信息和各区域信息分别进行反向切片处理,得到所述头部信息、各段信息和各区域信息分别对应的内存起始地址和地址偏移,每个内存起始地址和地址偏移形成一个内存地址范围,并从所述头部信息、各段信息和各区域信息中解析出所述目标压缩镜像文件中包含的方法名和/或类名作为可读性代码信息;根据所述头部信息、各段信息和各区域信息对应的内存地址范围,以及从所述头部信息、各段信息和各区域信息中解析出的方法名和/或类名,生成所述符号化信息表。
进一步地,处理器还用于:若根据所述系统信息确定本地存在所述目标动态库,则对本地存在的所述目标动态库进行符号化处理,得到符号化信息表。
进一步地,处理器还用于:根据所述系统信息确定所述目标动态库对应的目标版本信息;将所述目标版本信息在本地已有各动态库的版本信息中进行匹配;若未匹配到所述目标版本信息,确定本地不存在所述目标动态库;若匹配到所述目标版本信息,确定本地存在所述目标动态库。
进一步地,处理器在用于下载所述目标应用对应的包含所述目标动态库的固件安装包时,具体用于:从所述目标应用对应的官方网站或应用服务器,获取包含所述目标动态库的固件安装包的下载地址;根据所述下载地址,从所述目标应用对应的官方网站或应用服务器下载包含所述目标动态库的固件安装包。
关于本申请实施例中上述各模块或单元具体实现的原理以及各步骤的详细实施方式可参见上文中相同或相应步骤的描述,在此不再赘述
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。

Claims (11)

1.一种崩溃堆栈信息处理方法,其特征在于,包括:
获取终端设备在运行目标应用期间产生的崩溃堆栈信息和所述终端设备的系统信息,所述系统信息指向目标动态库,所述崩溃堆栈信息是在所述目标应用加载所述目标动态库中二进制代码的过程中产生的,包含指向被加载的二进制代码的内存地址;
若根据所述系统信息确定本地不存在所述目标动态库,则下载所述目标应用对应的包含所述目标动态库的固件安装包,并从所述固件安装包中提取所述目标动态库;
对所述目标动态库进行符号化处理,得到符号化信息表,所述符号化信息表中包含与所述目标动态库中的二进制代码对应的内存地址范围和可读性代码信息;
根据所述符号化信息表中包含的内存地址范围和可读性代码信息,结合所述崩溃堆栈信息中包含的内存地址,定位所述崩溃堆栈信息对应的可读性代码信息作为问题代码信息。
2.根据权利要求1所述的方法,其特征在于,从所述固件安装包中提取所述目标动态库,包括:
对所述固件安装包进行解压缩,得到多个压缩镜像文件,所述多个压缩镜像文件被存储在指定存储设备上,所述多个压缩镜像文件具有不同的属性信息;
根据所述多个压缩镜像文件的属性信息,从中选择所述目标动态库所在的目标压缩镜像文件,并加载所述指定存储设备上的所述目标压缩镜像文件。
3.根据权利要求2所述的方法,其特征在于,所述属性信息为所述压缩镜像文件占据存储空间的大小,则根据所述多个压缩镜像文件的属性信息,从中选择所述目标动态库所在的目标压缩镜像文件,包括:
从所述多个压缩镜像文件中,选择占据存储空间最大的压缩镜像文件作为所述目标动态库所在的目标压缩镜像文件。
4.根据权利要求3所述的方法,其特征在于,对所述目标动态库进行符号化处理,得到符号化信息表,包括:
对所述目标压缩镜像文件中包含的二进制代码进行反向切片处理,得到所述二进制代码对应的内存地址范围和可读性代码信息,以形成所述符号化信息表。
5.根据权利要求4所述的方法,其特征在于,对所述目标压缩镜像文件中包含的二进制代码进行反向切片处理,得到所述二进制代码对应的内存地址范围和可读性代码信息,以形成所述符号化信息表,包括:
按照可执行文件格式,对所述目标压缩镜像文件进行结构解析,得到所述目标压缩镜像文件包含的头部信息、多个段信息以及每个段信息包含的多个区域信息,所述头部信息和每个区域信息分别包含所述目标压缩镜像文件中的部分二进制代码;
利用符号化工具对所述头部信息、各段信息和各区域信息分别进行反向切片处理,得到所述头部信息、各段信息和各区域信息分别对应的内存起始地址和地址偏移,每个内存起始地址和地址偏移形成一个内存地址范围,并从所述头部信息、各段信息和各区域信息中解析出所述目标压缩镜像文件中包含的方法名和/或类名作为可读性代码信息;
根据所述头部信息、各段信息和各区域信息对应的内存地址范围,以及从所述头部信息、各段信息和各区域信息中解析出的方法名和/或类名,生成所述符号化信息表。
6.根据权利要求1所述的方法,其特征在于,还包括:
若根据所述系统信息确定本地存在所述目标动态库,则对本地存在的所述目标动态库进行符号化处理,得到符号化信息表。
7.根据权利要求6所述的方法,其特征在于,还包括:
根据所述系统信息确定所述目标动态库对应的目标版本信息;
将所述目标版本信息在本地已有各动态库的版本信息中进行匹配;
若未匹配到所述目标版本信息,确定本地不存在所述目标动态库;
若匹配到所述目标版本信息,确定本地存在所述目标动态库。
8.根据权利要求1-7任一项所述的方法,其特征在于,下载所述目标应用对应的包含所述目标动态库的固件安装包,包括:
从所述目标应用对应的官方网站或应用服务器,获取包含所述目标动态库的固件安装包的下载地址;
根据所述下载地址,从所述目标应用对应的官方网站或应用服务器下载包含所述目标动态库的固件安装包。
9.一种崩溃堆栈信息处理装置,其特征在于,包括:
获取模块,用于获取终端设备在运行目标应用期间产生的崩溃堆栈信息和所述终端设备的系统信息,所述系统信息指向目标动态库,所述崩溃堆栈信息是在所述目标应用加载所述目标动态库中二进制代码的过程中产生的,包含指向被加载的二进制代码的内存地址;
提取模块,用于若根据所述系统信息确定本地不存在所述目标动态库,则下载所述目标应用对应的包含所述目标动态库的固件安装包,并从所述固件安装包中提取所述目标动态库;
符号化处理模块,用于对所述目标动态库进行符号化处理,得到符号化信息表,所述符号化信息表中包含与所述目标动态库中的二进制代码对应的内存地址范围和可读性代码信息;
定位模块,用于根据所述符号化信息表中包含的内存地址范围和可读性代码信息,结合所述崩溃堆栈信息中包含的内存地址,定位所述崩溃堆栈信息对应的可读性代码信息作为问题代码信息。
10.一种计算机设备,其特征在于,包括:存储器和处理器;其中,所述存储器,用于存储计算机程序;所述处理器耦合至所述存储器,用于执行所述计算机程序以用于执行权利要求1-8中任一项所述方法中的步骤。
11.一种存储有计算机程序的计算机可读存储介质,其特征在于,当所述计算机程序被处理器执行时,致使所述处理器能够实现权利要求1-8中任一项所述方法中的步骤。
CN202210383836.9A 2022-04-12 2022-04-12 崩溃堆栈信息处理方法、装置、设备及存储介质 Pending CN114816816A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210383836.9A CN114816816A (zh) 2022-04-12 2022-04-12 崩溃堆栈信息处理方法、装置、设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210383836.9A CN114816816A (zh) 2022-04-12 2022-04-12 崩溃堆栈信息处理方法、装置、设备及存储介质

Publications (1)

Publication Number Publication Date
CN114816816A true CN114816816A (zh) 2022-07-29

Family

ID=82534027

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210383836.9A Pending CN114816816A (zh) 2022-04-12 2022-04-12 崩溃堆栈信息处理方法、装置、设备及存储介质

Country Status (1)

Country Link
CN (1) CN114816816A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117234963A (zh) * 2023-11-14 2023-12-15 海马云(天津)信息技术有限公司 动态库处理方法和装置

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117234963A (zh) * 2023-11-14 2023-12-15 海马云(天津)信息技术有限公司 动态库处理方法和装置
CN117234963B (zh) * 2023-11-14 2024-01-23 海马云(天津)信息技术有限公司 动态库处理方法和装置

Similar Documents

Publication Publication Date Title
US9665849B2 (en) Employing dependency graph in software build projects
US20160026519A1 (en) Application Compatibility Leveraging Successful Resolution of Issues
CN111680253B (zh) 页面应用数据包生成方法、装置、计算机设备及存储介质
CN111078481B (zh) 获取配置检查清单的方法、装置、电子设备及存储介质
CN112099880B (zh) 场景驱动的应用程序约减方法和系统
CN114115904A (zh) 信息处理方法、装置、服务器及存储介质
CN107688456B (zh) 文件生成方法、设备以及计算机可读存储介质
CN114816816A (zh) 崩溃堆栈信息处理方法、装置、设备及存储介质
US11755458B2 (en) Automatic software behavior identification using execution record
CN111240987B (zh) 移植程序检测方法、装置、电子设备及计算机可读存储介质
CN115080114B (zh) 应用程序的移植处理方法、装置和介质
CN115048082A (zh) 微前端系统构建方法、装置、服务器及可读存储介质
CN114064111A (zh) 一种部署包的版本信息的管理方法及设备
CN114860202A (zh) 项目运行方法、装置、服务器及存储介质
CN111273940B (zh) 将程序文件上传至代码仓库的方法及装置
CN112800194A (zh) 一种接口变更识别方法、装置、设备及存储介质
US11030087B2 (en) Systems and methods for automated invocation of accessibility validations in accessibility scripts
CN114330278A (zh) 一种判断返回数据一致性的方法及设备
CN110502251B (zh) 应用安装方法及装置
CN115421785B (zh) 应用程序的移植处理方法、装置和介质
CN116955209B (zh) WebAssembly虚拟机的测试方法和装置
US11256602B2 (en) Source code file retrieval
CN115454827B (zh) 兼容性检测方法、系统、设备和介质
CN109840273B (zh) 一种文案生成方法和装置
CN113568620A (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