一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

异常组件的识别方法、装置、设备、存储介质及程序产品与流程

2022-08-02 23:45:30 来源:中国专利 TAG:


1.本公开涉及计算机技术领域,尤其涉及一种异常组件的识别方法、装置、设备、存储介质及程序产品。


背景技术:

2.应用程序的复杂度越来越高,所以其开发过程通常基于模块化分工进行。每个开发人员负责对应的模块开发,然后将各个模块的代码统一集成为数据包后发布,这种协作模式极大提升了开发效率。然而,应用程序的使用中发生异常情况,例如崩溃(crash)异常等,此时需要对相应的代码进行检查,必要时进行修改。目前,在该模块化的开发模式下,发现异常情况后,一般由人工对异常信息进行分配至对应的开发人员进行检查/修改。这种异常信息的人工分配方式,人工参与程度高,且随着应用程序的业务复杂度增加,人力成本进一步增加,且异常模块的识别效率变低。


技术实现要素:

3.本公开提出一种异常组件的识别方法、装置、设备、存储介质及程序产品,以在一定程度上解决异常组件的识别效率低,成本高的技术问题。
4.本公开第一方面,提供了一种异常组件的识别方法,包括:
5.获取针对目标应用程序的异常日志信息;
6.基于所述异常日志信息中的异常地址信息和第一映射关系得到所述异常地址信息的符号化信息;其中,所述符号化信息包括索引信息,所述第一映射关系包括基于所述预设符号表得到的关于地址信息和符号化信息的映射关系;
7.基于所述索引信息和第二映射关系得到所述异常日志信息的编译路径;其中,所述第二映射关系包括基于所述预设符号表得到的关于索引信息和编译路径的映射关系;
8.基于所述编译路径和用于指示编译路径中组件信息位置的预设配置信息确定所述异常组件。
9.本公开第二方面,提供了一种异常组件的识别装置,包括:
10.获取模块,用于获取针对目标应用程序的异常日志信息;
11.第一映射模块,用于基于所述异常日志信息中的异常地址信息和第一映射关系得到所述异常地址信息的符号化信息;其中,所述符号化信息包括索引信息,所述第一映射关系包括基于所述预设符号表得到的关于地址信息和符号化信息的映射关系;
12.第二映射模块,用于基于所述索引信息和第二映射关系得到所述异常日志信息的编译路径;其中,所述第二映射关系包括基于所述预设符号表得到的关于索引信息和编译路径的映射关系;
13.组件确定模块,用于基于所述编译路径和关于编译路径和组件信息的预设配置信息确定所述异常组件。
14.本公开第三方面,提供了一种电子设备,其特征在于,包括一个或者多个处理器、
存储器;和一个或多个程序,其中所述一个或多个程序被存储在所述存储器中,并且被所述一个或多个处理器执行,所述程序包括用于执行根据第一方面所述的方法的指令。
15.本公开第四方面,提供了一种包含计算机程序的非易失性计算机可读存储介质,当所述计算机程序被一个或多个处理器执行时,使得所述处理器执行第一方面所述的方法。
16.本公开第五方面,提供了一种计算机程序产品,包括计算机程序指令,当所述计算机程序指令在计算机上运行时,使得计算机执行第一方面所述的方法。
17.从上面所述可以看出,本公开提供的一种异常组件的识别方法、装置、设备、存储介质及程序产品,基于预设符号表构建相应的关于地址信息和符号化信息的映射关系、关于索引信息和编译路径的映射关系,并据此确定异常日志信息对应的编译路径,再根据该编译路径和预设配置信息确定发生异常的组件。能够实现异常组件的自动化识别,有助于异常组件相关的异常信息的分配效率,进一步提升开发和维护效率。
附图说明
18.为了更清楚地说明本公开或相关技术中的技术方案,下面将对实施例或相关技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本公开的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
19.图1为本公开实施例的异常组件的识别架构的示意图。
20.图2为本公开实施例的示例性电子设备的硬件结构示意图。
21.图3为本公开实施例的异常组件的识别方法的流程示意图。
22.图4为本公开实施例的异常组件的识别方法的原理示意图。
23.图5为根据本公开实施例的组件配置信息的界面示意图。
24.图6为本公开实施例的异常组件的识别装置的示意图。
具体实施方式
25.为使本公开的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本公开进一步详细说明。
26.需要说明的是,除非另外定义,本公开实施例使用的技术术语或者科学术语应当为本公开所属领域内具有一般技能的人士所理解的通常意义。本公开实施例中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或者物件。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电性的连接,不管是直接的还是间接的。“上”、“下”、“左”、“右”等仅用于表示相对位置关系,当被描述对象的绝对位置改变后,则该相对位置关系也可能相应地改变。
27.应用程序的运行过程中,可能存在逻辑错误,例如调用错误、数组越界、空指针等,导致应用程序的运行异常,例如发生程序崩溃等。当应用程序发生异常情况时,该异常情况的相关信息会被自动记录到异常日志中,为应用程序的开发人员提供解决异常问题的数据
基础。然而,现有的异常信息的分配方式是由指定人员进行人工分配,应用程序发生异常情况时,异常日志中会记录相应的异常日志信息,指定人员根据该异常日志信息的调用栈信息人工判断发生该异常情况的组件/模块,将相关的异常信息分配至该异常发生的模块对应的开放人员进行检查。这种人工判断和分配方式,极大地制约了异常信息的分配效率,降低了异常组件的识别效率,导致应用程序的开发和维护效率降低,人工成本增加。因此,如何实现异常组件的自动化识别以提高异常组件的识别效率,从而提高应用程序的开发和维护效率,降低成本为了亟需解决的技术问题。
28.鉴于此,本公开实施例提供了一种异常组件的识别方法、装置、设备、存储介质及程序产品。基于预设符号表构建相应的关于地址信息和符号化信息的映射关系、关于索引信息和编译路径的映射关系,并据此确定异常日志信息对应的编译路径,再根据该编译路径和预设配置信息确定发生异常的组件。能够实现异常组件的自动化识别,有助于异常组件相关的异常信息的分配效率,进一步提升开发效率。
29.图1示出了本公开实施例的异常组件的识别架构的示意图。参考图1,该异常组件的识别架构100可以包括服务器110、终端120以及提供通信链路的网络130。服务器110和终端120之间可通过有线或无线的网络130连接。其中,服务器110可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、cdn、以及大数据和人工智能平台等基础云计算服务的云服务器。
30.终端120可以是硬件或软件实现。例如,终端120为硬件实现时,可以是具有显示屏并且支持页面显示的各种电子设备,包括但不限于智能手机、平板电脑、电子书阅读器、膝上型便携计算机和台式计算机等等。终端120设备为软件实现时,可以安装在上述所列举的电子设备中;其可以实现成多个软件或软件模块(例如用来提供分布式服务的软件或软件模块),也可以实现成单个软件或软件模块,在此不做具体限定。
31.需要说明的是,本技术实施例所提供的异常组件的识别方法可以由终端120来执行,也可以由服务器110来执行。应了解,图1中的终端、网络和服务器的数目仅为示意,并不旨在对其进行限制。根据实现需要,可以具有任意数目的终端、网络和服务器。
32.图2示出了本公开实施例所提供的示例性电子设备200的硬件结构示意图。如图2所示,电子设备200可以包括:处理器202、存储器204、网络模块206、外围接口208和总线210。其中,处理器202、存储器204、网络模块206和外围接口208通过总线210实现彼此之间在电子设备200的内部的通信连接。
33.处理器202可以是中央处理器(central processing unit,cpu)、图像处理器、神经网络处理器(npu)、微控制器(mcu)、可编程逻辑器件、数字信号处理器(dsp)、应用专用集成电路(application specific integrated circuit,asic)、或者一个或多个集成电路。处理器202可以用于执行与本公开描述的技术相关的功能。在一些实施例中,处理器202还可以包括集成为单一逻辑组件的多个处理器。例如,如图2所示,处理器202可以包括多个处理器202a、202b和202c。
34.存储器204可以配置为存储数据(例如,指令、计算机代码等)。如图2所示,存储器204存储的数据可以包括程序指令(例如,用于实现本公开实施例的异常组件的识别方法的程序指令)以及要处理的数据(例如,存储器可以存储其他模块的配置文件等)。处理器202
也可以访问存储器204存储的程序指令和数据,并且执行程序指令以对要处理的数据进行操作。存储器204可以包括易失性存储装置或非易失性存储装置。在一些实施例中,存储器204可以包括随机访问存储器(ram)、只读存储器(rom)、光盘、磁盘、硬盘、固态硬盘(ssd)、闪存、存储棒等。
35.网络模块206可以配置为经由网络向电子设备200提供与其他外部设备的通信。该网络可以是能够传输和接收数据的任何有线或无线的网络。例如,该网络可以是有线网络、本地无线网络(例如,蓝牙、wifi、近场通信(nfc)等)、蜂窝网络、因特网、或上述的组合。可以理解的是,网络的类型不限于上述具体示例。在一些实施例中,网络模块106可以包括任意数量的网络接口控制器(nic)、射频模块、接收发器、调制解调器、路由器、网关、适配器、蜂窝网络芯片等的任意组合。
36.外围接口208可以配置为将电子设备200与一个或多个外围装置连接,以实现信息输入及输出。例如,外围装置可以包括键盘、鼠标、触摸板、触摸屏、麦克风、各类传感器等输入设备以及显示器、扬声器、振动器、指示灯等输出设备。
37.总线210可以被配置为在电子设备200的各个组件(例如处理器202、存储器204、网络模块206和外围接口208)之间传输信息,诸如内部总线(例如,处理器-存储器总线)、外部总线(usb端口、pci-e总线)等。
38.需要说明的是,尽管上述电子设备200的架构仅示出了处理器202、存储器204、网络模块206、外围接口208和总线210,但是在具体实施过程中,该电子设备200的架构还可以包括实现正常运行所必需的其他组件。此外,本领域的技术人员可以理解的是,上述电子设备200的架构中也可以仅包含实现本公开实施例方案所必需的组件,而不必包含图中所示的全部组件。
39.dsym文件是操作系统(例如ios系统)原生编译工具链的产物,可以用来记录调试信息,其中也包括源文件的编译路径。例如,基于dsym文件中记录的调试信息debug_info中的方法标记(例如dw_tag_subprogram die)可以索引到对应的源文件编译路径属性dw_at_decl_file,从而得到编译路径。根据编译路径,则可以直接确定该对应的类库(pod)名称,由此则可以根据预设符号表确定出类库名称对应的组件。例如,dsym文件可以包括:
40.dw_at_decl_file("/code1/code2/code3/pods/code4/code5/code6.m")则表示编译路径是"/code1/code2/code3/pods/code4/code5/code6.m",对于从中可以直接确定其对应的类库(pod)名称是“pods”后的code4。根据该类库(pod)名称code4和指示编译路径中组件信息位置的预设配置信息就可以确定编译路径中的组件信息,从而确定对应的组件。
41.异常日志文件可以保存每个应用程序发生异常的函数内存地址,而这些函数内存地址可以在dsym文件中找到具体的文件名、函数名和行号信息。据此,可以根据该函数内存地址在dsym文件中确定对应的编译路径,然后根据编译路径确定对应的类库名称,进而确定出发生异常的组件,实现异常组件的自动识别。由于dsym文件托管在应用程序的监控后台,其源文件的编译路径与源码形式还是二进制集成形式无关。即使是二进制集成的软件开发工具包(software development kit,sdk),只要有调试信息debugging info,就都可以解析出源文件的完整编译路径。所以,本公开实施例的方案只需依赖于dsym文件,而dsym又是一个标准化的文件,因此本公开实施例的方案可以适用于所有应用程序,具有良好的
普适性。
42.参见图3,图3示出了根据本公开实施例的异常组件的识别方法的流程示意图。图3中,异常组件的识别方法300可以包括如下步骤。
43.在步骤s301,获取针对目标应用程序的异常日志信息。
44.其中,每当应用程序发生崩溃等异常情况的时候,会生成一份异常日志并存储在设备上。该异常日志会记录下当前进程中的所有执行线程的堆栈,以及异常发生的原因描述等异常日志信息,以便于快速定位到发生异常的原因。
45.在一些实施例中,异常日志信息可以包括进程信息、基本信息、异常信息、线程回溯、异常地址信息、动态库信息。其中,异常地址信息包括发生异常的二进制地址信息,需要对其进行符号化解析,得到开发人员可读的代码函数信息。
46.在步骤s302,基于所述异常日志信息中的异常地址信息和第一映射关系得到所述异常地址信息的符号化信息;其中,所述符号化信息包括索引信息,所述第一映射关系包括基于所述预设符号表得到的关于地址信息和符号化信息的映射关系。
47.其中,对于异常日志信息,需要使用预设符号表将二进制地址等原始信息映射为源代码级别的方法名称和代码行数,以便开发人员可读。而预设符号表是指在源代码编译后,在编译生成的二进制文件app的同级目录下生成的同名的dsym文件。dsym文件包含了基于16进制的保存函数地址映射信息,所有调试的符号都在dsym文件中,包括文件名、函数名、行号等。由于源代码每次编译后,都会生成一个新的dsym文件。因此,应用程序的每一个发布版本,都会备份一个对应的dsym文件,以便调试和定位问题。
48.在对异常日志信息的每一行进行符号解析时,可以直接将当前符合所在源文件的编译路径一起返回。然而,应用程序的监控后台在进行符号解析时,是对所有符号表的全部解析,将编译路径随解析结果一起返回则会加大存储负担,对计算资源和存储资源带来极大的挑战。那么基于预设符号表建立源文件在预设符号表中的偏移地址到编译路径的映射关系map_adress_path,并在该映射关系中对每个偏移地址adress及其对应的编译路径path中设置索引信息i。同时,可以将每个异常地址信息的地址范围所对应的符号化信息中设置对应的索引信息i,该索引信息i作为符号化信息的一部分返回。那么,则可以根据符号化信息中的索引信息i可以直接在映射关系map_adress_path确定对应的编译路径path。相比于直接在符号化信息中返回编译路径path,基于映射关系map_adress_path来确定编译路径能够减少数据量,节省计算资源和存储资源。
49.在一些实施例中,方法300还可以包括:基于预设符号表进行符号表预解析,得到关于地址信息和符号化信息的所述第一映射关系;其中,符号化信息包括索引信息。具体地,参见图4,图4示出了根据本公开实施例的异常组件的识别方法的原理示意图。开发人员在编译后可以将对应的预设符号表(例如.dsym文件)上传至数据库tbs进行存储,例如经由符号表上传模块410上传。存储成功后数据库tbs向符号表上传模块410返回成功信息的指令。在通过符号表预解析模块420构建第一映射关系时,可以从符号表上传模块410处获取预设符号表的存储地址;符号表上传模块410可以通过rocktmq消息将该预设符号表的存储地址发送至符号表预解析模块420。符号表预解析模块420根据该存储地址从tbs同步预设符号表,并基于获取的预设符号表进行预解析,得到关于地址信息和符号化信息的映射关系,作为第一映射关系。例如,第一映射关系map1包括地址信息adress1:符号化信息
symbol1_index1(索引信息);异常日志信息中可以包括异常地址信息,例如该异常地址信息为adress1,则可以基于异常地址信息adress1与第一映射关系map1,确定异常地址信息adress1的符号化信息和索引信息为symbol1_index1。
50.在步骤s303,基于所述符号化信息中的所述索引信息和第二映射关系得到所述异常日志信息的编译路径;其中,所述第二映射关系包括基于所述预设符号表得到的关于索引信息和编译路径的映射关系。
51.在一些实施例中,方法300还可以包括:基于预设符号表进行符号表预解析,得到关于索引信息和编译路径所述第二映射关系。例如,第一映射关系中地址信息adress1可以对应于索引信息index1,而预设符号表(dsym文件)中可以根据地址信息adress1确定对应的编译路径path1,则可以建立索引信息index1到编译路径path1的第二映射关系map2。这样在获取异常日志信息中的异常地址信息后,从第一映射关系map1可以确定符号化信息_索引信息为symbol1_index1;然后在根据索引信息index1从第二映射关系map2可以确定对应的编译路径path1。
52.在一些实施例中,第二映射关系中的索引信息与编译路径一一对应。
53.进一步地,在一些实施例中,第二映射关系可以采用键值的数据结构。例如,第二映射关系可以包括k:v,键k表示索引信息,值v表示编译路径。
54.在一些实施例中,基于预设符号表进行符号表预解析,得到关于索引信息和编译路径所述第二映射关系,可以进一步包括:将所述预设符号表中关于系统文件的编译路径过滤,得到过滤后的预设符号表;基于过滤后的预设符号表生成所述第二映射关系。
55.其中,系统文件与异常情况无关,所以关于该系统文件的编译路径并不参与异常组件的识别。关于系统文件的编译路径可以包括与系统库相关的编译路径,例如,"/applications/xcode"开头的编译路径;还可以包括编译器自动生成的文件的编译路径,例如,文件名为"《compiler-generated》"的文件路径。移除系统文件的编译路径后所建立的第二映射关系可以进一步压缩数据量,减小存储规模,节省存储空间。
56.在步骤s304,基于所述编译路径和用于指示编译路径中组件信息位置的预设配置信息确定所述异常组件。
57.在一些实施例中,基于所述编译路径和用于指示编译路径中组件信息位置的预设配置信息确定所述异常组件,包括:
58.基于所述编译路径确定所述异常日志信息的类库名称;
59.基于所述类库名称和所述预设配置信息确定所述编译路径中的组件信息;
60.基于所述组件信息确定所述异常组件。
61.在一些实施例中,基于所述编译路径确定所述异常日志信息的类库名称,包括:
62.判断所述编译路径是否包括第一预设字符串;
63.响应于所述编译路径包括第一预设字符串,将所述编译路径中位于所述预设字符串之后的第一字符串确定为所述类库名称。
64.其中,位于所述预设字符串之后的第一字符串可以指编译路径中第一预设字符串后与之相邻的分割符之后的字符串为第一字符串,即编译路径中pods/与下一个/之间的字符串。
65.在一些实施例中,第一预设字符串可以包括pods或__main__/external。具体地,
对于以cocoapods多仓方式集成的sdk,无论是源码还是bits二进制,其特征是源文件的完整编译路径中有pods关键字,例如/users/code1/code2/code3/code4/pods/code5/code6/code7.m,所以,异常日志信息的类库名称就是pods/与下一个/之间的字符串code5。对于以bazel monorepo多仓方式集成的sdk,源码形式的编译路径中包含有__main__/external关键字,例如/code1/code2/code3/code4/__main__/external/code5/code6/code7/code8.m,所以,异常日志信息的类库名称就是__main__/external/与下一个/之间的字符串code5。
66.在一些实施例中,基于所述编译路径确定所述异常日志信息的类库名称,包括:
67.判断所述编译路径是否包括第一预设字符串;
68.响应于所述编译路径不包括第一预设字符串,将所述编译路径中位于首位的第二字符串确定为所述类库名称。
69.其中,位于首位的第二字符串可以指编译路径的第一个字符串。对于以bazel monorepo多仓方式集成的sdk,二进制形式的编译路径中并没有明显的特征,例如,code1/code2/classes/code3.m,则可以位于首位的字符串code1作为类库名称。
70.在一些实施例中,基于所述编译路径确定所述异常日志信息的类库名称,包括:
71.判断所述编译路径是否包括第二预设字符串;
72.响应于所述编译路径包括第二预设字符串,将所述第二预设字符串在第三映射关系中对应的预设类库名称确定为所述异常日志信息的类库名称。
73.其中,第二预设字符串可以指与组件相关的关键字信息,例如第二预设字符串与组件具有映射关系。对于以闭源代码或二进制依赖方式集成的sdk,sdk的开发人员可以在目标应用程序的监控后台配置源文件的编译路径中的关键字信息和类库名称的映射关系,则编译路径中存在该关键字信息即可根据映射关系确定对应的类库名称。例如:
74./var/code1/code2/ttmp/code3/code4.mm对于播放器中的代码,开发人员可以配置ttmp关键字信息到ttplayersdk的映射关系,这样只要发现源文件的编译路径中有ttmp关键字就可以确定异常组件的信息应该分到ttplayersdk这个类库名称中。
75.在一些实施例中,基于所述类库名称和所述预设配置信息确定所述异常组件,包括:
76.基于所述类库名称和所述预设配置信息确定异常组件特征;
77.基于所述异常组件特征确定异常组件名称,以确定所述异常组件。
78.其中,预设配置信息可以是描述编译路径和组件信息之间关系的数据。根据预设配置信息可以确定组件信息,例如组件名等,从而根据组件信息可以定位到对应的组件。组件信息可以是编译路径中的关键字,也可以是由该关键字移动对应的固定偏移量后所在位置的信息。
79.在一些实施例中,预设配置信息可以包括至少一个预设规则,每个预设规则包括关键信息以及关键信息的偏移量。例如,预设配置信息可以是列表的形式。预设规则ruler可以包括关键信息anchor 偏移量shift,偏移量shift大于0则表示右移,偏移量shift小于0则表示左移,偏移量shift等于0则表示关键信息本身即为组件信息。例如,对于编译地址1:
80./users/code1/code2/ttmp/code3/code4/code5.mm
81.其中,关键信息anchor=ttmp,偏移量shift=0则ttmp记为组件信息。
82.对于编译地址2:
83./users/code1/code2/pods/code3/code4/code5.mm
84.其中,关键信息anchor=/pods/,偏移量shift=1。编译地址2中,关键信息anchor(即/pods/)将整个编译地址2分为前后两部分:关键信息anchor之前的部分/users/code1/code2;以及关键信息anchor之后的部分code3/code4/code5.mm,然后再分别对这两部分以/关键字拆分,又可以得到第一个数据[users,code1,code2]和第二个数据[code3,code4,code5.mm]两个数组,约定偏移量为0时组件信息就是关键信息本身,正数代表第二个数组中的下标索引(从1开始递增),即从关键信息开始向右移动;负数代表第一个数组中的下标索引(从-1开始递减),即从关键信息开始向左移动。编译地址2中的关键信息是/pods/,偏移量是1,则组件信息是code3。
[0085]
对于编译地址3:
[0086]
/bd/code1/code2/classes/code3.m
[0087]
其中,关键信息anchor=/classes/,偏移量shift=-1。编译地址3中组件信息是code2。
[0088]
进一步地,预设规则具有优先级。其中,可以按照优先级的顺序依次对编译路径进行匹配,直至匹配到编译路径中包括对应的预设规则,并据此确定出组件信息。优先级越高,则表示该预设规则的通用性越高,编译路径与该预设规则匹配得到组件信息的概率越大。
[0089]
在实际应用中,对于面向对象代码(即oc代码)的组件,从编译路径中确定的组件信息可能就是组件名本身。但是对于一些底层库来说,可能组件信息与组件名并不完全相同。所以,还可以设置业务配置信息,以方便后续从宿主角度将各类稳定性问题拆分/分配至不同的业务,有利于指导各个业务进行优化的指标指定。例如,业务配置信息可以包括:组件信息info以及对应的业务线business,而根据该业务线business可以确定执行该业务线的组件为组件信息info对应的组件。
[0090]
在一些实施例中,所述异常日志信息包括异常动态库名称,所述方法还包括:
[0091]
获取所述目标应用程序中组件所对应的组件动态库名称;
[0092]
判断所述组件动态库名称是否与所述异常动态库名称相匹配;
[0093]
响应于所述组件动态库名称与所述异常动态库名称相匹配,确定所述组件动态库名称对应的组件为所述异常组件。
[0094]
具体地,对于以动态库的形式集成的sdk,目标应用程序的监控平台支持动态库分配规则,即sdk可以在该监控平台上注册动态库名字,当异常调用栈匹配到动态库名字的时候就分配到注册该动态库名字的目标开发人员,例如,异常日志中包括名称为为rtc的动态库,则可直接将该动态库名称对应的组件确定为异常组件,还可以将该异常组件的信息分配给rtc sdk。
[0095]
在一些实施例中,方法300还包括:
[0096]
获取开发人员确定的组件配置信息;
[0097]
判断所述异常组件与所述组件配置信息是否匹配;
[0098]
响应于所述异常组件与所述组件配置信息是否匹配,将所述异常组件的信息发送
至所述目标开发人员。
[0099]
具体来说,开发人员可以根据自身需要配置组件配置信息,包括sdk名称、匹配策略、组件名、动态库名称等。其中,匹配策略可以指返回的异常组件的信息是组件的全栈信息还是部分栈信息,组件名可以指静态库组件名,。在步骤s304确定异常组件后,与组件配置信息进行对比,如果异常组件包括在组件配置信息中,说明异常组件的信息由该开发人员进行检查、优化,则将相同的异常组件的信息发送给该开发人员。如图5所示,图5示出了根据本公开实施例的组件配置信息的界面示意图,开发人员x设置的sdk名称为sdk1,匹配策略为全栈匹配,组件名为组件1和组件2,动态库名称为abc、d、efghi。那么,根据本公开实施例的方法,sdk1对应的目标应用程序发生诸如崩溃的异常情况时,异常日志信息记录发生该异常的异常地址信息,并经由第一映射关系和第二映射关系确定对比的编译路径,在结合预设配置信息确定出发生异常的异常组件。如果该异常组件的组件名或动态库名称与预设配置信息中一致,即组件名为组件1或组件2,或者动态库名称为abc、d或efghi,则将该异常组件的信息全部发送至开发人员x。如图4中所示,识别发生异常的组件名(例如步骤s304)后,从已经注册过组件名的sdk空间(例如sdk1)中查找异常组件,并分配至对应的sdk空间。从而实现异常组件的自动化识别,提升了异常组件相关的异常信息的分配效率,sdk的开发和维护效率。
[0100]
需要说明的是,本公开实施例的方法可以由单个设备执行,例如一台计算机或服务器等。本实施例的方法也可以应用于分布式场景下,由多台设备相互配合来完成。在这种分布式场景的情况下,这多台设备中的一台设备可以只执行本公开实施例的方法中的某一个或多个步骤,这多台设备相互之间会进行交互以完成所述的方法。
[0101]
需要说明的是,上述对本公开的一些实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于上述实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
[0102]
基于同一发明构思,与上述任意实施例方法相对应的,本公开还提供了一种异常组件的识别装置。
[0103]
参考图6,所述异常组件的识别装置,包括:
[0104]
获取模块,用于获取针对目标应用程序的异常日志信息;
[0105]
第一映射模块,用于基于所述异常日志信息中的异常地址信息和第一映射关系得到所述异常地址信息的符号化信息;其中,所述符号化信息包括索引信息,所述第一映射关系包括基于所述预设符号表得到的关于地址信息和符号化信息的映射关系;
[0106]
第二映射模块,用于基于所述索引信息和第二映射关系得到所述异常日志信息的编译路径;其中,所述第二映射关系包括基于所述预设符号表得到的关于索引信息和编译路径的映射关系;
[0107]
组件确定模块,用于基于所述编译路径和关于编译路径和组件信息的预设配置信息确定所述异常组件。
[0108]
为了描述的方便,描述以上装置时以功能分为各种模块分别描述。当然,在实施本公开时可以把各模块的功能在同一个或多个软件和/或硬件中实现。
[0109]
上述实施例的装置用于实现前述任一实施例中相应的异常组件的识别方法,并且具有相应的方法实施例的有益效果,在此不再赘述。
[0110]
基于同一发明构思,与上述任意实施例方法相对应的,本公开还提供了一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令用于使所述计算机执行如上任一实施例所述的异常组件的识别方法。
[0111]
本实施例的计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。
[0112]
上述实施例的存储介质存储的计算机指令用于使所述计算机执行如上任一实施例所述的异常组件的识别方法,并且具有相应的方法实施例的有益效果,在此不再赘述。
[0113]
所属领域的普通技术人员应当理解:以上任何实施例的讨论仅为示例性的,并非旨在暗示本公开的范围(包括权利要求)被限于这些例子;在本公开的思路下,以上实施例或者不同实施例中的技术特征之间也可以进行组合,步骤可以以任意顺序实现,并存在如上所述的本公开实施例的不同方面的许多其它变化,为了简明它们没有在细节中提供。
[0114]
另外,为简化说明和讨论,并且为了不会使本公开实施例难以理解,在所提供的附图中可以示出或可以不示出与集成电路(ic)芯片和其它部件的公知的电源/接地连接。此外,可以以框图的形式示出装置,以便避免使本公开实施例难以理解,并且这也考虑了以下事实,即关于这些框图装置的实施方式的细节是高度取决于将要实施本公开实施例的平台的(即,这些细节应当完全处于本领域技术人员的理解范围内)。在阐述了具体细节(例如,电路)以描述本公开的示例性实施例的情况下,对本领域技术人员来说显而易见的是,可以在没有这些具体细节的情况下或者这些具体细节有变化的情况下实施本公开实施例。因此,这些描述应被认为是说明性的而不是限制性的。
[0115]
尽管已经结合了本公开的具体实施例对本公开进行了描述,但是根据前面的描述,这些实施例的很多替换、修改和变型对本领域普通技术人员来说将是显而易见的。例如,其它存储器架构(例如,动态ram(dram))可以使用所讨论的实施例。
[0116]
本公开实施例旨在涵盖落入所附权利要求的宽泛范围之内的所有这样的替换、修改和变型。因此,凡在本公开实施例的精神和原则之内,所做的任何省略、修改、等同替换、改进等,均应包含在本公开的保护范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献