一种应用程序的异常定位方法及装置与流程

专利2022-06-29  67


本发明涉及计算机技术领域,特别是涉及一种应用程序的异常定位方法及装置。



背景技术:

在应用程序中的运行过程中,数据计算错误、组件调用错误等异常,经常会引起应用程序中的页面或组件崩溃,导致应用程序出现闪退或白屏的等状况,影响用户的正常使用。

目前,针对应用程序中出现的异常,主要由人工对应用程序的代码进行排查,确定异常发生的具体位置,以对产生异常的代码进行修复。由于编译压缩后的应用程序的代码并不具备可读性,加上应用程序的结构复杂,无法快速准确的定位异常的发生位置,以致无法快速对产生异常的代码进行修复,影响用户正常使用。



技术实现要素:

本发明实施例的目的在于提供一种应用程序的异常定位方法及装置,以解决应用程序异常无法快速定位的问题。具体技术方案如下:

在本发明实施的第一方面,首先提供了一种应用程序的异常定位方法,执行于终端设备,包括:

对目标应用程序中的组件进行扫描,得到第一扫描结果;

根据所述第一扫描结果确定所述目标应用程序中的第一目标组件;

对所述第一目标组件进行异常封装,获得异常封装后的所述第一目标组件;

向服务器发送包括异常封装后的所述第一目标组件的所述目标应用程序,以使所述服务器根据异常封装后的所述第一目标组件,对所述目标应用程序在运行过程中出现的异常进行定位。

在本发明实施的第二方面,还提供了一种应用程序的异常定位方法,执行于服务器,包括:

接收终端设备发送的目标应用程序,所述目标应用程序包括异常封装后的第一目标组件;

根据异常封装后的所述第一目标组件,对所述目标应用程序在运行过程中出现的异常进行定位。

在本发明实施的第三方面,还提供了一种应用程序的异常定位装置,部署于终端设备,包括:

扫描模块,用于对目标应用程序中的组件进行扫描,得到第一扫描结果;

确定模块,用于根据所述第一扫描结果确定所述目标应用程序中的第一目标组件;

封装模块,用于对所述第一目标组件进行异常封装,获得异常封装后的所述第一目标组件;

发送模块,用于向服务器发送包括异常封装后的所述第一目标组件的所述目标应用程序,以使所述服务器根据异常封装后的所述第一目标组件,对所述目标应用程序在运行过程中出现的异常进行定位。

在本发明实施的第四方面,还提供了一种应用程序的异常定位装置,部署于服务器,包括:

接收模块,用于接收终端设备发送的目标应用程序,所述目标应用程序包括异常封装后的第一目标组件;

定位模块,用于根据异常封装后的所述第一目标组件,对所述目标应用程序在运行过程中出现的异常进行定位。

在本发明实施的第五方面,还提供了一种终端设备,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;

存储器,用于存放计算机程序;

处理器,用于执行存储器上所存放的程序时,实现如本发明实施例第一方面所述的方法步骤。

在本发明实施的第六方面,还提供了一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时实现如本发明实施例第一方面所述的方法。

在本发明实施的第七方面,还提供了一种服务器,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;

存储器,用于存放计算机程序;

处理器,用于执行存储器上所存放的程序时,实现如本发明实施例第二方面所述的方法步骤。

在本发明实施的第八方面,还提供了一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时实现如本发明实施例第二方面所述的方法。

本发明实施例提供一种应用程序的异常定位方法及装置,包括:对目标应用程序中的组件进行扫描,得到第一扫描结果,根据第一扫描结果确定目标应用程序中的第一目标组件,对第一目标组件进行异常封装,获得异常封装后的第一目标组件,向服务器发送包括异常封装后的第一目标组件的目标应用程序,以使服务器根据异常封装后的第一目标组件,对目标应用程序在运行过程中出现的异常进行定位。通过确定目标应用程序中的第一目标组件,对第一目标组件进行异常封装,可以在目标应用程序的运行过程中,根据异常封装后的第一目标组件,对出现的异常进行定位,确定发生错误的位置,提高异常定位的效率和精度。同时,由于只对目标应用程序中的第一目标组件进行了异常封装,避免了对目标应用程序中的所有组件进行异常封装,可以解决对目标应用程序中的所有组件进行异常封装时,导致目标应用程序的体积过大,代码冗余的问题。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍。

图1为本发明实施例一提供的一种应用程序的异常定位方法的步骤流程图;

图2为本发明实施例二提供的一种应用程序的异常定位方法的步骤流程图;

图3为本发明实施例三提供的一种应用程序的异常定位装置的结构框图;

图4为本发明实施例四提供的一种应用程序的异常定位装置的结构框图;

图5为本发明实施例五提供的一种终端设备的结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行描述。

现有技术中,在reactnative开发平台中,应用程序组件内部的javascrip脚本语言出现错误或者异常时,会使应用程序中的页面或组件崩溃,导致应用程序出现闪退或者白屏等状况,影响用户的体验。在应用程序的运行过程中,编译压缩后的应用程序代码为机器语言,不具备可读性,并且由于应用程序的结构庞大复杂,因此在应用程序运行出现错误时,只能将错误的位置定位到应用程序中的某个页面,无法快速准确的定位到具体的某个组件或函数。而如果对应用程序中的每个组件或函数进行异常封装,采用异常封装后的组件或函数对应用程序运行过程中出现的错误或异常进行定位,会导致应用程序的代码冗余,使代码包的体积成倍的增加,耗费机器资源。

参见图1,图1为本发明实施例一提供的一种应用程序的异常定位方法的步骤流程图,本实施例提供的异常定位方法适用于对应用程序运行过程中出现的异常进行定位,以解决应用程序运行过程中出现异常时,无法快速准确的确定产生异常的位置的问题,提高异常定位的效率和准确性。本实施例提供的异常定位方法可以由异常定位装置执行,异常定位装置可以设置于终端设备,异常定位装置通常以软件和/或硬件的方式实现,该方法可以包括:

步骤101,对目标应用程序中的组件进行扫描,得到第一扫描结果。

其中,目标应用程序可以是由工作人员开发,用于运行在终端设备中,以实现一定功能的应用程序。实际使用中,可以根据实际需求,对扫描过程进行设置,以得到相应的第一扫描结果。例如,可以对目标应用程序中的每个组件进行扫描,获取目标应用程序的每个组件中,第一预设位置的第一权值,第一权值为根据每个组件的功能预先设置的。例如,可以在开发目标应用程序的过程中,由开发人员根据每个组件的功能分别设置每个组件的第一权值。若目标应用程序中包括用于进行视频播放的第一组件,用于进行渲染的第二组件、以及用于进行数据处理的第三组件,由于第一组件在目标应用程序的运行过程中,执行视频播放任务,出现异常的可能性较大,可以设置第一组件的第一权值为9(第一权值的最大值为10,最小值为0)。同理,第二组件和第三组件在目标应用程序的运行过程中,出现异常的可能性较低,可以设置第二组件的第一权值为4,第三组件的第一权值为2。实际操作中,可以在目标应用程序的开发过程中,在每个组件的第一预设位置添加第一权值,以供扫描过程中读取并且确定该组件的第一权值。其中,第一预设位置在组件中的具体位置可以根据需求设置。

本实施例中,对目标应用程序的组件进行扫描,得到第一扫描结果的步骤可以包括:对目标应用程序进行静态分析,得到分析结果。

例如,可以首先对目标应用程序的源代码进行词法分析,根据构词规则确定源代码中的单词符号或符号,然后在词法分析的基础上进行语法分析,将单词符号或符号组合成各类语法短语,如“程序”、“语句”和“表达式”等,最后根据语法分析的结果确定源代码中的每个组件,然后读取每个组件中第一预设位置的第一权值。对目标应用程序进行静态分析的过程,可参考现有技术中的静态分析过程,本实施例在此不做详细描述。

步骤102,根据第一扫描结果确定目标应用程序中的第一目标组件。

本实施例中,在扫描得到第一扫描结果后,可以根据第一扫描结果确定目标应用程序中的第一目标组件,第一目标组件为目标应用程序中需要进行异常封装的组件。

本实施例中,结合步骤101中的举例,若第一扫描结果为第一权值,则可以根据目标应用程序中每个组件的第一权值确定目标应程序中的第一目标组件。例如,可以设置第一预设阈值,在扫描得到每个组件的第一权值后,若组件的第一权值大于或等于第一预设阈值,则可以确定该组件为第一目标组件。如可以设置第一预设阈值为5,则在扫描得到第一组件、第二组件和第三组件的第一权值后,可以确定第一组件的第一权值大于第一预设阈值,为第一目标组件,第二组件的第一权值,以及第三组件的第一权值都小于第一预设阈值,不作为第一目标组件。其中,第一预设阈值的具体数值,以及根据第一权值确定第一目标组件的具体方法可以根据需求设置,本实施例对此不做限定。

本实施例中,可以根据每个组件的第一权值对目标应用程序中的组件进行筛选,得到第一目标组件,避免由工作人员对目标应用程序中的组件依次读取分析后得到第一目标组件,提高确定第一目标组件的效率,降低人力成本。同时,在目标应用程序的开发过程中,根据组件的功能设置第一权值,根据第一权值确定第一目标组件,可以准确的对目标应用程序中的组件进行异常封装,提高异常封装的准确性,以提高异常定位的精度。

需要说明的是,对目标应用程序的组件进行扫描得到的第一扫描结果不同,根据第一扫描结果确定第一目标组件的方法也可以不同,根据第一扫描结果确定第一目标组件的方法可以根据实际需求设置,本实施例对此不做限制。

步骤103,对第一目标组件进行异常封装,获得异常封装后的第一目标组件。

本实施例中,在确定第一目标组件后,可以对第一目标组件进行异常分装,得到异常封装后的第一目标组件。

例如,结合步骤101至102中的举例,在确定第一组件为第一目标组件后,可以只对目标应用程序中的第一组件进行异常封装。例如,可以对第一组件进行异常封装,使第一组件产生异常时返回错误信息error1!。实际操作过程中,可以根据需求设置第一目标组件的异常封装,对第一目标组件进行异常封装的过程可参考现有技术,本实施例对此不做限制。

步骤104,向服务器发送包括异常封装后的第一目标组件的目标应用程序。

本实施例中,在对第一目标组件进行异常封装,得到包括异常封装后的第一目标组件的目标应用程序之后,可以向服务器发送目标应用程序,使服务器运行目标应用程序。服务器在运行目标应用程序时,可以根据异常封装后的第一目标组件,对目标应用程序运行过程中出现的异常进行定位。

例如,结合步骤101至103中的举例,在对目标应用程序中的第一组件进行异常封装后,当目标应用程序运行异常,返回错误信息:error1!时。服务器可以根据返回的错误信息:error1!,确定目标应用程序中第一组件出现异常,出现异常的位置在第一组件。实际使用时,服务器根据异常封装后的第一目标组件进行异常定位的方法可以根据需求设置,本实施例对此不做限制。

本实施例中,对目标应用程序中的组件进行扫描,得到第一扫描结果,根据第一扫描结果确定目标应用程序中的第一目标组件,对第一目标组件进行异常封装,获得异常封装后的第一目标组件,向服务器发送包括异常封装后的第一目标组件的目标应用程序,以使服务器根据异常封装后的第一目标组件,对目标应用程序在运行过程中出现的异常进行定位。通过确定目标应用程序中的第一目标组件,对第一目标组件进行异常封装,可以在目标应用程序的运行过程中,根据异常封装后的第一目标组件,对出现的异常进行定位,确定发生错误的位置,提高异常定位的效率和精度。同时,由于只对目标应用程序中的第一目标组件进行了异常封装,避免了对目标应用程序中的所有组件进行异常封装,可以解决对目标应用程序中的所有组件进行异常封装时,导致目标应用程序的体积过大,代码冗余的问题。

参照图2,图2为本发明实施例二提供的一种应用程序的异常定位方法的步骤流程图,该方法可以包括:

步骤201,终端设备对目标应用程序中的组件进行扫描,得到第一扫描结果,以及对目标应用程序中的函数进行扫描,得到第二扫描结果。

本实施例中,对目标应用程序中的组件进行扫描,得到第一扫描结果的过程可以通过如下方式实现:

方式一:对目标应用程序中的组件进行扫描,获取目标应用程序的每个组件中第一预设位置的第一权值,第一权值为根据每个组件的功能预先设置的。

对目标应用程序中的组件进行扫描,得到每个组件的第一权值的过程可参考实施例一,本实施例在此不做赘述。

方式二:对目标应用程序中的组件进行扫描,获取目标应用程序中每个组件的调用次数。

其中,组件的调用次数为组件在目标应用程序中被其他组件调用的次数。在目标应用程序中,组件的调用次越多,意味者该组件在目标应用程序的运行过程中,出现异常的可能性越大,因此可以对目标应用程序中的组件进行扫描,得到目标应用程序中每个组件的调用次数。对目标应用程序中的组件进行扫描,获取目标应用程序中每个组件的调用次数的步骤,可以包括:对目标应用程序进行静态分析,获取目标应用程序的组件调用关系图;根据组件调用关系图,确定目标应用程序中每个组件的调用次数。

本实施例中,在得到目标应用程序后,可以对目标应用程序进行静态分析,首先对目标应用程序进行词法分析和语法分析,然后在语法分析的基础上进行控制流分析,得到目标应用程序的组件调用关系图。根据组件调用关系图,确定组件调用关系图中,每个组件被其他组件调用的次数,作为组件的调用次数。词法分析、语法分析和控制流分析等静态分析技术,以及根据组件调用关系图,确定每个组件的调用次数的过程,可参考现有技术,本实施例在此不做赘述。

方式三:对目标应用程序中的组件进行扫描,获取目标应用程序中每个组件的调用次数和每个组件中第一预设位置的第一权值。

本实施例中,在对目标应用程序中的组件进行扫描的过程中,可以同时获取目标应用程序中每个组件的调用次数和每个组件中第一预设位置的第一权值。

本实施例中,对目标应用程序中的函数进行扫描,得到第二扫描结果的过程可以通过如下方式实现:

方式一:对目标应用程序中的函数进行扫描,获取目标应用程序的每个函数中第二预设位置的第二权值,第二权值为根据每个函数的功能预先设置的。

其中,根据目标应用程序中函数的功能预先设置函数的第二权值的过程,可参考实施例一中根据组件的功能预先设置组件的第一权值的过程。对目标应用程序中的函数进行扫描,获取目标应用程序的每个函数中第二预设位置的第二权值的过程,可参考实施例一中对目标应用程序中的组件进行扫描,获取目标应用程序的每个组件中第一预设位置的第一权值的过程,本实施例在此不做赘述。

方式二:对目标应用程序中的函数进行扫描,获取目标应用程序中每个函数的调用次数。

其中,函数的调用次数为函数在目标应用程序中被其他函数调用的次数。在目标应用程序中,函数的调用次越多,意味者该函数在目标应用程序的运行过程中,出现异常的可能性越大。对目标应用程序中的函数进行扫描,获取目标应用程序中每个函数的调用次数的过程与获取目标应用程序中每个组件的调用次数的过程相同,本实施例在此不做赘述。

方式三:对目标应用程序中的函数进行扫描,获取目标应用程序中每个函数的调用次数和每个函数中第二预设位置的第二权值。

本实施例中,在对目标应用程序中的函数进行扫描的过程中,可以同时获取目标应用程序中每个函数的调用次数和每个函数中第二预设位置的第二权值。

需要说明的是,对目标应用程序中的函数进行扫描,得到第二扫描结果的过程与对目标应用程序中的组件进行扫描,得到第一扫描结果的区别在于,对目标应用程序中的函数进行扫描时,以目标应用程序中的每个函数为单位进行扫描,获取每个函数的第二权值和/或调用次数,而对目标应用程序中的组件进行扫描时,是以目标应用程序中的每个组件为单位进行扫描,获取每个组件的第一权值和/或调用次数。

实际使用时,终端设备可以同步执行对目标应用程序中的组件和函数进行扫描的步骤,也可以分步执行,本实施例对此不做限制。

可选的,扫描结果中还可以包括目标应用程序的组件结构树。

本实施例中,可以对目标应用程序进行扫描,得到目标应用程序的组件结构树。对目标应用程序进行扫描,得到目标应用程序的组件结构树的过程与对目标应用程序进行扫描,得到目标应用程序的函数调用关系图的过程相同,本实施例在此不做赘述。

步骤202,终端设备根据每个组件的调用次数,分别确定每个组件的第三权值,并根据每个函数的调用次数,分别确定每个函数的第四权值。

本实施例中,扫描得到目标应用程序中每个组件的调用次数后,可以根据每个组件的调用次数,分别确定每个组件的第三权值。

例如,可以设置第三权值的初始值,在初始值的基础上,组件的调用次数每增加一次,对应的第三权值增加预设数值。结合实施例一中的举例,可以设置第一组件、第二组件和第三组件的第三权值的初始值均为0,组件的调用次数每增加一次,第三权值增加1。通过静态分析确定第一组件的调用次数为6次,第二组件的调用次数为9次,第三组件的调用次数为4次后,根据第一组件、第二组件和第三组件的调用次数,可以分别确定第一组件的第三权值为6,第二组件的第三权值为9,第三组件的第三权值为4。其中,每个组件的第三权值的初始值可以相同,也可以不同,初始值的设置可以根据需求设置。同时,组件的调用次数增加一次,对应的第三权值增加的预设数值也可以根据需求设置,如预设数值可以为2、3或4等。实际操作中,根据组件调用次数确定第三权值的方法可以根据需求设置,本实施例对此不做限制。

本实施例中,根据每个函数的调用次数,分别确定每个函数的第四权值的过程与根据每个组件的调用次数,分别确定每个组件的第三权值的过程相同,本实施例在此不做赘述。

步骤203,终端设备根据每个组件的第一权值和/或第三权值,确定目标应用程序中的第一目标组件,并根据每个函数的第二权值和/或第四权值,确定第二目标组件中的目标函数。

其中,第二目标组件为目标应用程序中的任意一个组件,终端设备可以根据第二扫描结果,确定目标应用程序中每个组件中的目标函数。

本实施例中,在根据扫描结果得到每个组件的第一权值和/或第三权值后,可以根据每个组件的第一权值和/或第三权值,确定目标应用程序中的第一目标组件。

其中,根据每个组件的第一权值确定目标应用程序中的第一目标组件的过程可参考实施例一,本实施在此不做赘述。

本实施例中,可以只根据每个组件的第三权值确定目标应用程序中的第一目标组件。例如,可以设置第二预设阈值,若组件的第三权值大于或等于第二预设阈值,则该组件为第一目标组件。结合步骤202中的举例,可以设置第二预设阈值为8次,则可以确定目标应用程序中,第二组件的第三权值大于第二预设阈值,第二组件为第一目标组件。第一组件和第三组件的第三权值均小于第二预设阈值8,不作为第一目标组件。其中,第二预设阈值的具体数值可以根据需求设置。实际使用时,根据第三权值确定目标应用程序中的第一目标组件的方法,可以根据需求设置,本实施例对此不做限制。

本实施例中,还可以根据第一权值和第三权值确定目标应用程序中的第一目标组件,根据第一权值和第三权值确定目标应用程序中的第一目标组件的过程,可以包括如下步骤:

根据每个组件的第一权值和第三权值,计算得到每个组件的第五权值;

根据每个组件的第五权值,确定目标应用程序中的第一目标组件。

本实施例中,在得到目标应用程序中每个组件的第一权值和第三权值后,可以根据第一权值和第三权值,计算得到每个组件的第五权值,根据每个组件的第五权值确定第一目标组件。例如,可以设置第三预设阈值,并分别设置第一权值和第三权值的权重,计算第一权值和第三权值的加权平均值,得到第五权值,若第五权值大于或等于第三预设阈值,则该组件为第一目标组件。例如,可以设置第三预设阈值为5,第一权值的权重为0.2,第三权值的权重为0.8。结合实施例一和实施例二中的举例,第一组件的第一权值为9、第三权值为6,第二组件的第一权值为4,第三权值为9,第三组件的第一权值为2,第三权值为4,可以确定第一组件的第五权值为0.2×9 0.8×6=6.6,第二组件的第五权值为0.2×4 0.8×9=8,第三组件的第五权值为0.2×2 0.8×4=3.6,则目标应用程序中,第一组件和第二组件的第五权值大于第三预设阈值,为第一目标组件。实际使用时,第三预设阈值、第一权值的权重和第三权值的权重可以根据需求设置,本实施例对此不做限制。需要说明的是,根据第一权值和第三权值计算得到第五权值的方法,可以根据需求设置,本实施例对此不做限制,例如可以直接计算第一权值和第三权值的乘积,将第一权值和第三权值的乘积作为第五权值。

本实施例中,由于根据每个组件的第一权值和/或调用次数对目标应用程序中的组件进行筛选,得到第一目标组件,可以避免由工作人员对目标应用程序中的组件依次读取分析后得到第一目标组件,提高确定第一目标组件的效率,降低人力成本。同时,结合每个组件的第一权值和调用次数确定第一目标组件,可以更准确的确定第一目标组件,从而在目标应用程序的运行过程中,可以更准确的确定异常组件。实际使用中,可以根据需求选择根据第一权值、第三权值,或根据第一权值和第三权值确定第一目标组件,本实施例对此不做限制。

本实施例中,终端设备可以针对目标应用程序中的每个组件(第二目标组件),根据每个组件中包括的所有函数的第二权值和/或第四权值,确定该组件中的目标函数。例如,第一组件(第二目标组件)中包括第一函数、第二函数和第三函数,则可以根据第一函数、第二函数和第三函数的第二权值和/或第四权值,确定第一组件中的目标函数,例如确定第一函数为第一组件中的目标函数。根据每个组件中包括的每个函数的第二权值和/或第四权值,确定每个组件中的目标函数的过程可参考根据每个组件的第一权值和/或第三权值,确定目标应用程序中的第一目标组件的过程,本实施例在此不做详细描述。

步骤204,终端设备在第一目标组件中设置与第一目标组件对应的第一标记,并在目标函数中设置与目标函数对应的第二标记。

本实施例中,可以对目标应用程序中已经确定的第一目标组件设置对应的第一标记。例如,结合步骤203,可以对第一组件和第二组件分别设置对应的第一标记,如可以在第一组件的第三预设位置设置第一标记“a”,第一标记“a”与第一组件对应,在第二组件的第三预设位置设置第一标记“b”,第一标记“b”与第二组件对应。实际使用时,第二预设位置在组件中的具体位置,以及第一标记的具体形式可以根据需求设置,本实施例对此不做限制。

同理,可以对目标函数设置对应的第二标记。例如,结合步骤203,在第一组件(第一目标组件)中,可以对第一函数设置对应的第二标记,如可以在第一函数的第四预设位置设置第二标记“x”,第二标记“x”与第一函数对应。实际使用时,第四预设位置在函数中的具体位置,以及第二标记的具体形式可以根据需求设置,本实施例对此不做限制。

步骤205,终端设备对与第一标记对应的第一目标组件进行异常封装,获得异常封装后的第一目标组件,并对与第二标记对应的目标函数进行异常封装,获得异常封装后的目标函数。

本实施例中,确定第一目标组件,在第一目标组件中设置第一目标组件对应的第一标记后,可以对第一目标组件进行异常分装,得到异常封装后的第一目标组件。例如,结合步骤204,在确定第一目标组件为第一组件和第二组件后,可以分别对第一组件和第二组件进行异常封装,得到异常封装后的第一组件和第二组件。结合实施例一,可以对第二组件执行与第一组件相同的异常封装,使第二组件出现异常时,返回错误信息:error2!。根据异常封装后的第二组件,对目标应用程序在运行过程中出现的异常进行定位的过程,可参考实施例一,本实施例在此不做赘述。

同理,可以对第一组件(第二目标组件)中的第一函数(目标函数)进行异常封装,使第一函数出现异常时,返回错误信息:errora!。需要说明的是,在对目标函数的封装过程中,虽然第三组件并未被确定为第一目标组件,任然可以针对第三组件中的所有函数,确定目标函数,并对第三组件中的目标函数进行异常封装。

本实施例中,第一扫描结果中还可以包括目标应用程序的组件结构树,组件结构树中的每个节点对应目标应用程序中的一个组件。在确定第一目标组件,并设置与第一目标组件对应的第一标记后,组件结构树中的第一目标组件被标记。在进行异常封装的过程中,可以根据第一标记,对组件结构树中设置有第一标记的组件(设置有第一标记的组件为第一目标组件)进行异常封装。例如,结合步骤204,在异常封装过程中,组件结构树中包括第一组件、第二组件和第三组件,可以确定组件结构树中第一组件的第三预设位置设置有第一标记“a”,则可以确定第一组件为第一目标组件,执行对第一组件的异常封装。同理,可以确定第二组件的第三预设位置设置有第一标记“b”,可以确定第二组件为第一目标组件,执行对第二组件的异常封装。同时,可以确定第三组件的第三预设位置未设置有第一标记,则可以确定第三组件不是第一目标组件,不对第三组件进行异常封装。通过对第一目标组件设置对应的第一标记,在进行异常封装过程中,根据设置的第一标记判断组件是否为第一目标组件,对第一目标组件进行异常封装,可以避免从所有组件中依次确定第一目标组件的过程,提高异常封装的效率。

步骤206,终端设备向服务器发送包括异常封装后的第一目标组件和异常封装后的目标函数。

本实施例中,在对第一目标组件,和第二目标组件中的目标函数进行异常封装后,可以将包括异常封装后的第一目标组件和异常封装后的目标函数的目标应用程序发送至服务器,使服务器运行该目标应用程序。终端设备向服务器发送目标应用程序的过程可参考现有技术,本实施例对此不做详细描述。

步骤207,服务器接收终端设备发送的目标应用程序,目标应用程序包括异常封装后的第一目标组件和异常封装后的目标函数。

本实施例中,服务器可以接收并运行终端设备发送的目标应用程序,服务器接收并运行终端设备发送的目标应用程序的过程可参考现有技术,本实施例对此详细描述。

步骤208,服务器根据异常封装后的第一目标组件和异常封装后的目标函数,对目标应用程序在运行过程中出现的异常进行定位。

本实施例中,服务器根据异常封装后的第一目标组件和异常封装后的目标函数,对目标应用程序在运行过程中出现的异常进行定位,可以包括如下步骤:

获取目标应用程序运行过程中,出现异常时的错误信息;

确定错误信息对应的异常封装后的第一目标组件和/或目标函数,并将错误信息对应的异常封装后的第一目标组件作为第一目标异常组件,和/或将错误信息对应的异常封装后的目标函数作为异常目标函数;

确定第一目标异常组件对应的第一标记,和/或确定异常目标函数对应的第二标记;

根据第一标记和/或第二标记确定目标应用程序运行过程中,出现异常时的错误位置。

本实施例中,可以根据设置的与第一目标组件对应的第一标记和/或设置的与每个组件(第二目标组件)中的目标函数对应的第二标记确定目标应用程序运行过程中,出现异常时的错误位置。实际操作过程中,目标应用程序的源代码在运行前需要进行编译压缩,得到编译压缩后的目标代码,将目标代码发送至服务器,使目标代码运行在服务器中。本实施例中,由于在第一目标组件中设置了对应的第一标记,并在每个组件(第二目标组件)的目标函数中设置了对应的第二标记,因此对目标应用程序进行编译压缩后,得到的目标代码中,第一目标组件所在的位置具有对应的第一标记,目标函数所在的位置具有对应的第二标记,因此可以根据第一标记确定第一目标组件在目标代码中的位置,根据第二标记确定目标函数在目标代码中的位置。

例如,若目标应用程序在运行过程中,运行错误时,返回错误信息error1!和错误信息errora!,以及错误信息error2!,可以确定第一组件和第二组价(第一目标组件)发生异常,第一组件和第二组件为第一目标异常组件,同时可以确定第一组件中的第一函数为异常目标函数,确定第一组件对应的第一标记为“a”,第一组件中的第一函数对应的第二标记为“x”。此时,可以对目标应用程序的目标代码进行分析,确定目标代码中第一标记“a”所在的第一组件的位置,并确定第一组件中第二标记“x”所在的第一函数的位置,为目标应用程序运行过程中,出现异常的组件位置和函数位置。在确定异常产生的具体位置后,可以由人工手动进行错误复现,确定产生异常的原因,对目标应用程序进行调试,解决问题。在确定异常的具体位置,对目标应用程序进行处理的过程可参考现有技术,本实施例对此不做详细描述。通过对第一目标组件和第二目标组件中的目标函数设置对应的标记,在异常定位的过程中,可以通过标记确定目标应用程序的目标代码中第一目标异常组件和异常目标函数的具体位置,更快更准确的对目标代码中的异常进行定位。

需要说明的是,实际使用时,可以只确定目标应用程序中的第一目标组件,对第一目标组件进行异常封装,也可以在确定目标应用程序中的第一目标组件,同时确定目标应用程序中每个组件中的目标函数,对第一目标组件和目标函数分别进行异常封装。在目标应用程序的运行过程中,可以根据第一目标组件的异常封装,确定出现异常的组件,并根据目标函数的异常封装,确定出现异常的函数。同时,针对第一目标组件,可以确定第一目标组件中的目标函数,若第一目标组件中的第一目标函数出现异常,则可以在确定出现异常的组件的基础上,进一步确定组件中出现异常的函数。

本实施例中,对目标应用程序中的组件和函数进行扫描,确定目标应用程序中的第一目标组件和目标函数,对第一目标组件进行异常封装和对目标应用程序中每个组件中的目标函数进行异常分装。以使服务器根据异常封装后的第一目标组件和目标函数,对目标应用程序在运行过程中出现的异常进行定位。通过确定目标应用程序中的第一目标组件和目标函数,对第一目标组件和目标函数进行异常封装,可以在目标应用程序的运行过程中,根据异常封装后的第一目标组件和目标函数,对出现的异常进行定位,确定发生错误的位置,提高异常定位的效率和精度。同时,由于只对目标应用程序中的第一目标组件和目标函数进行了异常封装,避免了对目标应用程序中的所有组件和函数进行异常封装,可以解决对目标应用程序中的所有组件和函数进行异常封装时,导致目标应用程序的体积过大,代码冗余的问题。

参见图3,图3为本发明实施例三提供的一种应用程序的异常定位装置的结构框图,本实施例提供的异常定位装置适用于对应用程序运行过程中出现的异常进行定位,以解决应用程序运行过程中出现异常时,无法快速准确的确定产生异常的位置的问题,提高异常定位的效率和准确性。本实施例提供的异常定位装置可以部署于终端设备,该装置可以包括:扫描模块301、确定模块302、封装模块303和发送模块304。

扫描模块301用于对目标应用程序中的组件进行扫描,得到第一扫描结果。

确定模块302用于根据第一扫描结果确定目标应用程序中的第一目标组件。

封装模块303用于对第一目标组件进行异常封装,获得异常封装后的第一目标组件。

发送模块304用于向服务器发送包括异常封装后的第一目标组件的目标应用程序,以使服务器根据异常封装后的第一目标组件,对目标应用程序在运行过程中出现的异常进行定位。

本实施例中,对目标应用程序中的组件进行扫描,得到第一扫描结果,根据第一扫描结果确定目标应用程序中的第一目标组件,对第一目标组件进行异常封装,获得异常封装后的第一目标组件,向服务器发送包括异常封装后的第一目标组件的目标应用程序,以使服务器根据异常封装后的第一目标组件,对目标应用程序在运行过程中出现的异常进行定位。通过确定目标应用程序中的第一目标组件,对第一目标组件进行异常封装,可以在目标应用程序的运行过程中,根据异常封装后的第一目标组件,对出现的异常进行定位,确定发生错误的位置,提高异常定位的效率和精度。同时,由于只对目标应用程序中的第一目标组件进行了异常封装,避免了对目标应用程序中的所有组件进行异常封装,可以解决对目标应用程序中的所有组件进行异常封装时,导致目标应用程序的体积过大,代码冗余的问题。

可选的,扫描模块301具体用于对目标应用程序中的组件进行扫描,获取目标应用程序的每个组件中第一预设位置的第一权值和/或每个组件的调用次数,第一权值为根据每个组件的功能预先设置的。

确定模块302具体用于根据每个组件的第一权值和/或每个组件的调用次数,确定目标应用程序中的第一目标组件。

可选的,该装置还可以包括标记模块。

标记模块用于在第一目标组件中设置与第一目标组件对应的第一标记。

相应的,封装模块303具体用于对与第一标记对应的第一目标组件进行异常封装,获得异常封装后的第一目标组件。

可选的,扫描模块301还用于对目标应用程序中的函数进行扫描,得到第二扫描结果。

确定模块302还用于根据第二扫描结果确定第二目标组件中的目标函数,第二目标组件为目标应用程序中的任意一个组件。

封装模块303还用于对目标函数进行异常封装,获得异常封装后的目标函数。

发送模块304具体用于向服务器发送包括异常封装后的第一目标组件和目标函数的目标应用程序,以使服务器根据异常封装后的第一目标组件和目标函数,对目标应用程序在运行过程中出现的异常进行定位。

可选的,扫描模块301具体用于对目标应用程序中的函数进行扫描,获取目标应用程序的每个函数中第二预设位置的第二权值和/或每个函数的调用次数,第二权值为根据每个函数的功能预先设置的。

确定模块302具体用于根据第二目标组件中包括的每个函数的第二权值和/或调用次数,确定第二目标组件中的目标函数。

可选的,标记模块还用于在目标函数中设置与目标函数对应的第二标记。

相应的,封装模块303还用于对与第二标记对应的目标函数进行异常封装,获得异常封装后的目标函数。

参见图4,图4为本发明实施例四提供的一种应用程序的异常定位装置的结构框图,本实施例提供的异常定位装置可以部署于服务器,该装置可以包括:接收模块401和定位模块402。

接收模块401用于接收终端设备发送的目标应用程序,目标应用程序包括异常封装后的第一目标组件。

定位模块402用于根据异常封装后的第一目标组件,对目标应用程序在运行过程中出现的异常进行定位。

可选的,目标应用程序还包括异常封装后的目标函数。

定位模块402用于根据异常封装后的第一目标组件和目标函数,对目标应用程序在运行过程中出现的异常进行定位。

可选的,定位模块402具体用于获取目标应用程序运行过程中,出现异常时的错误信息;确定错误信息对应的异常封装后的第一目标组件和/或目标函数,并将错误信息对应的异常封装后的第一目标组件作为第一目标异常组件,和/或将错误信息对应的异常封装后的目标函数作为异常目标函数;确定第一目标异常组件对应的第一标记,和/或确定异常目标函数对应的第二标记;根据第一标记和/或第二标记确定目标应用程序运行过程中,出现异常时的错误位置。

参照图5,图5为本发明实施例五提供的一种终端设备的结构示意图,如图5所示,包括处理器501、通信接口502、存储器503和通信总线504,其中,处理器501,通信接口502,存储器503通过通信总线504完成相互间的通信,

存储器503,用于存放计算机程序。

处理器501,用于执行存储器503上所存放的程序时,实现如下步骤:

对目标应用程序中的组件进行扫描,得到第一扫描结果。

根据第一扫描结果确定目标应用程序中的第一目标组件。

对第一目标组件进行异常封装,获得异常封装后的第一目标组件。

向服务器发送包括异常封装后的第一目标组件的目标应用程序,以使服务器根据异常封装后的第一目标组件,对目标应用程序在运行过程中出现的异常进行定位。

上述终端提到的通信总线可以是外设部件互连标准(peripheralcomponentinterconnect,简称pci)总线或扩展工业标准结构(extendedindustrystandardarchitecture,简称eisa)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。

通信接口用于上述终端与其他设备之间的通信。

存储器可以包括随机存取存储器(randomaccessmemory,简称ram),也可以包括非易失性存储器(non-volatilememory),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。

上述的处理器可以是通用处理器,包括中央处理器(centralprocessingunit,简称cpu)、网络处理器(networkprocessor,简称np)等;还可以是数字信号处理器(digitalsignalprocessing,简称dsp)、专用集成电路(applicationspecificintegratedcircuit,简称asic)、现场可编程门阵列(field-programmablegatearray,简称fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。

在本发明提供的又一实施例中,还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述实施例中任一实施例所述的方法。

在本发明提供的又一实施例中,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述实施例中任一实施例所述的方法。

在本发明提供的又一实施例中,还提供了一种服务器,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;

存储器,用于存放计算机程序;

处理器,用于执行存储器上所存放的程序时,实现如下步骤:

接收终端设备发送的目标应用程序,目标应用程序包括异常封装后的第一目标组件;

根据异常封装后的第一目标组件,对目标应用程序在运行过程中出现的异常进行定位。

在本发明提供的又一实施例中,还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时使得计算机执行上述实施例中二中所述的方法。

在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(dsl))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,dvd)、或者半导体介质(例如固态硬盘solidstatedisk(ssd))等。

需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。


技术特征:

1.一种应用程序的异常定位方法,其特征在于,执行于终端设备,包括:

对目标应用程序中的组件进行扫描,得到第一扫描结果;

根据所述第一扫描结果确定所述目标应用程序中的第一目标组件;

对所述第一目标组件进行异常封装,获得异常封装后的所述第一目标组件;

向服务器发送包括异常封装后的所述第一目标组件的所述目标应用程序,以使所述服务器根据异常封装后的所述第一目标组件,对所述目标应用程序在运行过程中出现的异常进行定位。

2.根据权利要求1所述的方法,其特征在于,所述对目标应用程序中的组件进行扫描,得到第一扫描结果,包括:

对所述目标应用程序中的组件进行扫描,获取所述目标应用程序的每个所述组件中第一预设位置的第一权值和/或每个所述组件的调用次数,所述第一权值为根据每个所述组件的功能预先设置的;

所述根据所述第一扫描结果确定所述目标应用程序中的第一目标组件,包括:

根据每个所述组件的第一权值和/或每个所述组件的调用次数,确定所述目标应用程序中的所述第一目标组件。

3.根据权利要求1所述的方法,其特征在于,在所述对所述第一目标组件进行异常封装,获得异常封装后的所述第一目标组件之前,还包括:

在所述第一目标组件中设置与所述第一目标组件对应的第一标记;

所述对所述第一目标组件进行异常封装,获得异常封装后的所述第一目标组件,包括:

对与所述第一标记对应的所述第一目标组件进行异常封装,获得异常封装后的所述第一目标组件。

4.根据权利要求1-3任一项所述的方法,其特征在于,所述方法还包括:

对所述目标应用程序中的函数进行扫描,得到第二扫描结果;

根据所述第二扫描结果确定所述第二目标组件中的目标函数,所述第二目标组件为所述目标应用程序中的任意一个组件;

对所述目标函数进行异常封装,获得异常封装后的所述目标函数;

所述向服务器发送包括异常封装后的所述第一目标组件的所述目标应用程序,以使所述服务器根据异常封装后的所述第一目标组件,对所述目标应用程序在运行过程中出现的异常进行定位,包括:

向所述服务器发送包括异常封装后的所述第一目标组件和所述目标函数的所述目标应用程序,以使所述服务器根据异常封装后的所述第一目标组件和所述目标函数,对所述目标应用程序在运行过程中出现的异常进行定位。

5.根据权利要求4所述的方法,其特征在于,所述对所述目标应用程序中的函数进行扫描,得到第二扫描结果,包括:

对所述目标应用程序中的函数进行扫描,获取所述目标应用程序的每个所述函数中第二预设位置的第二权值和/或每个所述函数的调用次数,所述第二权值为根据每个所述函数的功能预先设置的;

所述根据所述第二扫描结果确定所述第二目标组件中的目标函数,包括:

根据所述第二目标组件中包括的每个函数的第二权值和/或每个函数的调用次数,确定所述第二目标组件中的所述目标函数。

6.根据权利要求5所述的方法,其特征在于,在所述对所述目标函数进行异常封装,获得异常封装后的所述目标函数之前,还包括:

在所述目标函数中设置与所述目标函数对应的第二标记;

所述对所述目标函数进行异常封装,获得异常封装后的所述目标函数,包括:

对与所述第二标记对应的所述目标函数进行异常封装,获得异常封装后的所述目标函数。

7.一种应用程序的异常定位方法,其特征在于,执行于服务器,包括:

接收终端设备发送的目标应用程序,所述目标应用程序包括异常封装后的第一目标组件;

根据异常封装后的所述第一目标组件,对所述目标应用程序在运行过程中出现的异常进行定位。

8.根据权利要求7所述的方法,其特征在于,所述目标应用程序还包括异常封装后的目标函数;

所述根据异常封装后的所述第一目标组件,对所述目标应用程序在运行过程中出现的异常进行定位,包括:

根据异常封装后的所述第一目标组件和所述目标函数,对所述目标应用程序在运行过程中出现的异常进行定位。

9.根据权利要求8所述的方法,其特征在于,所述根据异常封装后的所述第一目标组件和所述目标函数,对所述目标应用程序在运行过程中出现的异常进行定位,包括:

获取所述目标应用程序运行过程中,出现异常时的错误信息;

确定所述错误信息对应的异常封装后的所述第一目标组件和/或所述目标函数,并将所述错误信息对应的异常封装后的所述第一目标组件作为第一目标异常组件,和/或将所述错误信息对应的异常封装后的所述目标函数作为异常目标函数;

确定所述第一目标异常组件对应的第一标记,和/或确定所述异常目标函数对应的第二标记;

根据所述第一标记和/或所述第二标记确定所述目标应用程序运行过程中,出现异常时的错误位置。

10.一种应用程序的异常定位装置,其特征在于,部署于终端设备,包括:

扫描模块,用于对目标应用程序中的组件进行扫描,得到第一扫描结果;

确定模块,用于根据所述第一扫描结果确定所述目标应用程序中的第一目标组件;

封装模块,用于对所述第一目标组件进行异常封装,获得异常封装后的所述第一目标组件;

发送模块,用于向服务器发送包括异常封装后的所述第一目标组件的所述目标应用程序,以使所述服务器根据异常封装后的所述第一目标组件,对所述目标应用程序在运行过程中出现的异常进行定位。

11.一种应用程序的异常定位装置,其特征在于,部署于服务器,包括:

接收模块,用于接收终端设备发送的目标应用程序,所述目标应用程序包括异常封装后的第一目标组件;

定位模块,用于根据异常封装后的所述第一目标组件,对所述目标应用程序在运行过程中出现的异常进行定位。

12.一种终端设备,其特征在于,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;

存储器,用于存放计算机程序;

处理器,用于执行存储器上所存放的程序时,实现权利要求1-6任一所述的方法步骤。

13.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行时实现如权利要求1-6中任一所述的方法。

14.一种服务器,其特征在于,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;

存储器,用于存放计算机程序;

处理器,用于执行存储器上所存放的程序时,实现权利要求7-9任一所述的方法步骤。

15.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行时实现如权利要求7-9中任一所述的方法。

技术总结
本发明实施例提供了一种应用程序的异常定位方法及装置,该定位方法包括:对目标应用程序中的组件进行扫描,得到第一扫描结果,根据第一扫描结果确定目标应用程序中的第一目标组件,对第一目标组件进行异常封装,获得异常封装后的第一目标组件,向服务器发送包括异常封装后的第一目标组件的目标应用程序,以使服务器根据异常封装后的第一目标组件,对目标应用程序在运行过程中出现的异常进行定位。通过确定目标应用程序中的第一目标组件,对第一目标组件进行异常封装,可以在目标应用程序的运行过程中,根据异常封装后的第一目标组件,对出现的异常进行定位,确定发生错误的位置,提高异常定位的效率和精度。

技术研发人员:李倩
受保护的技术使用者:北京奇艺世纪科技有限公司
技术研发日:2020.01.08
技术公布日:2020.06.09

转载请注明原文地址: https://bbs.8miu.com/read-26606.html

最新回复(0)