CN107305522A - 用于对应用程序的重复崩溃进行检测的装置和方法 - Google Patents
用于对应用程序的重复崩溃进行检测的装置和方法 Download PDFInfo
- Publication number
- CN107305522A CN107305522A CN201610250990.3A CN201610250990A CN107305522A CN 107305522 A CN107305522 A CN 107305522A CN 201610250990 A CN201610250990 A CN 201610250990A CN 107305522 A CN107305522 A CN 107305522A
- Authority
- CN
- China
- Prior art keywords
- collapse
- code
- weight
- new
- fragment
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及对应用程序的重复崩溃进行检测的装置和方法。根据本发明的用于对应用程序的重复崩溃进行检测的装置,包括:路径确定单元,用于确定新崩溃的崩溃路径信息;路径分割单元,用于对崩溃路径信息进行分割,以获取一个或多个崩溃片段;哈希码和权重确定单元,用于确定一个或多个崩溃片段中的每个崩溃片段的哈希码和权重;签名确定单元,用于根据一个或多个崩溃片段中的每个崩溃片段的哈希码和权重确定新崩溃的哈希签名;以及重复崩溃确定单元,用于根据哈希签名确定新崩溃是否为已知崩溃中的一个的重复。使用根据本发明的用于对应用程序的重复崩溃进行检测的装置和方法能够快速可靠地实现崩溃的自动分类。
Description
技术领域
本发明涉及测试技术领域,具体地涉及用于对应用程序的重复崩溃进行检测的装置和方法。
背景技术
这个部分提供了与本发明有关的背景信息,这不一定是现有技术。
如今,移动互联网随着智能手机和3G/4G网络的快速发展变得越来越繁荣,并且人们逐渐开始使用智能手机。有很多不同的操作系统适用于智能手机,例如安卓(android)系统,在每个操作系统中又有成千上万的应用程序被开发出来。因此,对于应用程序的开发者来说,难以避免在使用应用程序的过程中出现错误,尤其是崩溃(crash)。当崩溃发生时,在用户没有得到任何提示的情况下应用程序就消失了,这样用户可能会对应用程序给出一个消极的反馈,导致应用程序的等级大大降低,用户的体验也变得十分不好。因而,应用程序的开发者希望当崩溃发生时能够尽快地结束崩溃。
然而,随着用户数目的增加,每天都会有大量的崩溃发生,这些崩溃中绝大部分的崩溃是重复的或者近似重复的。对这些崩溃进行人工地分类十分困难。因此,对崩溃自动进行分类是十分重要的,这样可以让应用程序的开发者只聚焦在最重要的崩溃上,同时可以快速地结束崩溃,提高用户的体验。
在传统的方法中,通过比较崩溃的堆栈跟踪中的字符串来确定两个崩溃的相似性,进而实现对崩溃的分类。由于崩溃的堆栈跟踪中存在大量的字符串,因此这种方法十分耗时。在另一种传统的方法中,将多个崩溃映射到崩溃图表上来识别崩溃的相似性,进而实现对崩溃的分类,这种方法与比较单独的崩溃相比能够更加精确地确定重复或近似重复的崩溃,然而当崩溃数目很多时难以存储和维护崩溃图表。
针对以上技术问题,本发明希望提出一种方案,能够快速可靠地检测出重复崩溃,从而实现崩溃的自动分类。
发明内容
这个部分提供了本发明的一般概要,而不是其全部范围或其全部特征的全面披露。
本发明的目的在于提供一种用于对应用程序的重复崩溃进行检测的装置和方法,能够快速可靠地对应用程序的重复崩溃进行检测从而自动地对崩溃进行分类。
根据本发明的一方面,提供了一种用于对应用程序的重复崩溃进行检测的装置,包括:路径确定单元,用于确定新崩溃的崩溃路径信息;路径分割单元,用于对所述崩溃路径信息进行分割,以获取一个或多个崩溃片段;哈希码和权重确定单元,用于确定所述一个或多个崩溃片段中的每个崩溃片段的哈希码和权重;签名确定单元,用于根据所述一个或多个崩溃片段中的每个崩溃片段的哈希码和权重确定所述新崩溃的哈希签名;以及重复崩溃确定单元,用于根据所述哈希签名确定所述新崩溃是否为已知崩溃中的一个的重复。
根据本发明的另一方面,提供了一种用于对应用程序的重复崩溃进行检测的方法,包括:确定新崩溃的崩溃路径信息;对所述崩溃路径信息进行分割,以获取一个或多个崩溃片段;确定所述一个或多个崩溃片段中的每个崩溃片段的哈希码和权重;根据所述一个或多个崩溃片段中的每个崩溃片段的哈希码和权重确定所述新崩溃的哈希签名;以及根据所述哈希签名确定所述新崩溃是否为已知崩溃中的一个的重复。
根据本发明的另一方面,提供了一种程序产品,该程序产品包括存储在其中的机器可读指令代码,其中,所述指令代码当由计算机读取和执行时,能够使所述计算机执行根据本发明的用于对应用程序的重复崩溃进行检测的方法。
根据本发明的另一方面,提供了一种机器可读存储介质,其上携带有根据本发明的程序产品。
使用根据本发明的用于对应用程序的重复崩溃进行检测的装置和方法,能够根据崩溃路径信息中的每个崩溃片段的哈希码和权重确定新崩溃的哈希签名,从而根据新崩溃的哈希签名确定新崩溃是否是重复崩溃。这样一来,为每个新崩溃都确定一个哈希签名,根据哈希签名即可确定是否是重复崩溃,这种方法相比于传统的方法实现简单,计算量小。同时,能够可靠地将重复的崩溃和近似重复的崩溃都检测出来。因此,使用根据本发明的用于对应用程序的重复崩溃进行检测的装置和方法能够快速可靠地实现崩溃的自动分类。
这个概要中的描述和特定例子只是为了示意的目的,而不旨在限制本发明的范围。
附图说明
在此描述的附图只是为了所选实施例的示意的目的而非全部可能的实施,并且不旨在限制本发明的范围。在附图中:
图1为根据本发明的实施例的用于对应用程序的重复崩溃进行检测的装置的结构框图;
图2(a)示例性示出根据本发明的实施例的堆栈跟踪;
图2(b)示例性示出根据本发明的另一个实施例的堆栈跟踪;
图3为根据本发明的实施例的对崩溃路径信息进行分割以获取崩溃片段的过程的示意图;
图4为根据本发明的实施例的确定每个崩溃片段的哈希码和权重的过程的示意图;
图5为根据本发明的实施例的确定每个崩溃片段的哈希码中的每一个比特位的权重的过程的示意图;
图6为根据本发明的实施例的确定新崩溃的哈希签名的过程的示意图;
图7为根据本发明的实施例的基于堆栈跟踪确定崩溃路径信息的过程的示意图;
图8为根据本发明的实施例的基于核心异常信息确定崩溃类型信息、崩溃点信息和崩溃路径信息的过程的示意图;
图9为根据本发明的实施例的已知崩溃的存储结构的示意图;
图10为根据本发明的实施例的合并崩溃的过程的示意图;
图11为根据本发明的实施例的用于对应用程序的重复崩溃进行检测的方法的流程图;以及
图12为其中可以实现根据本发明的实施例的基于分布式云环境平台的应用程序测试系统和方法的通用个人计算机的示例性结构的框图。
虽然本发明容易经受各种修改和替换形式,但是其特定实施例已作为例子在附图中示出,并且在此详细描述。然而应当理解的是,在此对特定实施例的描述并不打算将本发明限制到公开的具体形式,而是相反地,本发明目的是要覆盖落在本发明的精神和范围之内的所有修改、等效和替换。要注意的是,贯穿几个附图,相应的标号指示相应的部件。
实施方式
现在参考附图来更加充分地描述本发明的示例。以下描述实质上只是示例性的,而不旨在限制本发明、应用或用途。
下面提供了示例实施例,以便本发明将会变得详尽,并且将会向本领域技术人员充分地传达其范围。阐述了众多的特定细节如特定单元、装置和方法的示例,以提供对本发明的实施例的详尽理解。对于本领域技术人员而言将会明显的是,不需要使用特定的细节,示例实施例可以用许多不同的形式来实施,它们都不应当被解释为限制本发明的范围。在某些示例实施例中,没有详细地描述众所周知的过程、众所周知的结构和众所周知的技术。
图1为根据本发明的实施例的用于对应用程序的重复崩溃进行检测的装置的结构框图。如图1所示,根据本发明的实施例的用于对应用程序的重复崩溃进行检测的装置100可以包括路径确定单元110、路径分割单元120、哈希码和权重确定单元130、签名确定单元140和重复崩溃确定单元150。
根据本发明的实施例,路径确定单元110可以确定新崩溃的崩溃路径信息。当装置100获取了一个新崩溃时,可以由路径确定单元110来确定新崩溃的路径信息。进一步,路径确定单元110可以将确定的新崩溃的路径信息发送到路径分割单元120。
根据本发明的实施例,路径分割单元120可以对崩溃路径信息进行分割,以获取一个或多个崩溃片段。这里,路径分割单元120可以从路径确定单元110获取崩溃路径信息,并可以将获取的一个或多个崩溃片段发送到哈希码和权重确定单元130。
根据本发明的实施例,哈希码和权重确定单元130可以确定一个或多个崩溃片段中的每个崩溃片段的哈希码和权重。这里,哈希码和权重确定单元130可以从路径分割单元120获取一个或多个崩溃片段。进一步,哈希码和权重确定单元130可以确定每个崩溃片段的哈希码和权重。也就是说,对于每个崩溃片段,都确定了对应的哈希码和权重。根据本发明的实施例,哈希码和权重确定单元130可以利用本领域公知的任何方法来确定每个崩溃片段的哈希码,包括但不限于MD5(Message Digest Algorithm 5,消息摘要算法第5版)哈希码计算方法。进一步,根据本发明的实施例,哈希码和权重确定单元130可以根据实际的需求来设定每个崩溃片段的权重。进一步,哈希码和权重确定单元130可以将确定的每个崩溃片段的哈希码和权重发送到签名确定单元140。
根据本发明的实施例,签名确定单元140可以根据一个或多个崩溃片段中的每个崩溃片段的哈希码和权重确定新崩溃的哈希签名。这里,签名确定单元140可以从哈希码和权重确定单元140来获取每个崩溃片段的哈希码和权重。进一步,签名确定单元140可以采用各种不同的算法根据每个崩溃片段的哈希码和权重来确定整个崩溃的哈希签名。进一步,签名确定单元140可以将确定的新崩溃的哈希签名发送到重复崩溃确定单元150。
根据本发明的实施例,重复崩溃确定单元150可以根据哈希签名确定新崩溃是否为已知崩溃中的一个的重复。这里,重复崩溃确定单元150可以从签名确定单元140来获取新崩溃的哈希签名,并可以根据不同的算法来根据哈希签名确定新崩溃是否为已知崩溃中的一个的重复,包括但不限于比较新崩溃的哈希签名与已知崩溃的哈希签名。
由此可见,使用根据本发明的用于对应用程序的重复崩溃进行检测的装置,能够根据崩溃路径信息中的每个崩溃片段的哈希码和权重确定新崩溃的哈希签名,从而根据新崩溃的哈希签名确定新崩溃是否是重复崩溃。这样一来,为每个新崩溃都确定一个哈希签名,根据哈希签名即可确定是否是重复崩溃,这种方法相比于传统的方法实现简单,计算量小。同时,能够可靠地将重复的崩溃和近似重复的崩溃都检测出来。因此,使用根据本发明的用于对应用程序的重复崩溃进行检测的装置能够快速可靠地实现崩溃的自动分类。
根据本公开的实施例,路径确定单元110可以获取新崩溃的堆栈跟踪,进而根据堆栈跟踪来确定新崩溃的路径信息。图2(a)示例性示出根据本发明的实施例的堆栈跟踪。图2(b)示例性示出根据本发明的另一个实施例的堆栈跟踪。在图2(a)所示的实施例中,堆栈跟踪为简单模式的堆栈跟踪;在图2(b)所示的实施例中,堆栈跟踪为嵌套模式的堆栈跟踪。无论是哪种类型的堆栈跟踪,路径确定单元110都可以根据堆栈跟踪来确定新崩溃的路径信息。
根据本发明的实施例,崩溃路径信息对应一行或多行代码,并且路径分割单元120对崩溃路径信息进行分割以使得每个崩溃片段对应一行或多行代码中的一行代码。
图3为根据本发明的实施例的对崩溃路径信息进行分割以获取崩溃片段的过程的示意图。图3所示的崩溃路径信息为路径确定单元110从图2(b)所示的堆栈跟踪中确定的崩溃路径信息。如图3所示,该崩溃路径信息对应了多行代码,路径分割单元120对崩溃路径信息进行分割,使得多行代码中的每一行代码都对应一个崩溃片段。值得注意的是,虽然图3示出了崩溃路径信息包括多行代码的情况,但是当崩溃比较简单时,也可能会存在崩溃路径信息对应一行代码的情况,此时路径分割单元120获取的崩溃片段只有一个。
根据本发明的实施例,哈希码和权重确定单元130可以将崩溃路径信息中的一行或多行代码中的每行代码分为与应用程序相关的代码和与系统相关的代码。根据本发明的实施例,哈希码和权重确定单元130可以自己确定与应用程序相关的代码和与系统相关的代码,哈希码和权重确定单元130也可以从其它单元,例如路径确定单元110来获取这样的信息。根据本发明的实施例,崩溃路径信息中的每行代码可以包括多个包,所述多个包用分隔符分隔。例如,如图3所示的崩溃路径信息中的第一行代码包括多个包:“com”、“institution”、“utility”、“ImageRefCache”、“clear”和“63”,这多个包用分隔符“.”或者“:”分隔。
根据本发明的实施例,哈希码和权重确定单元130可以根据崩溃路径信息中的一行或多行代码中的每行代码中的第一个或者前两个包来确定与系统相关的代码,并且确定崩溃路径信息的一行或多行代码中除去与系统相关的代码为与应用程序相关的代码。例如,一行代码中的前两个包中存在“java”、“android”或者“dalvik”,则认为该行代码是与系统相关的代码。作为一个示例,在如图3所示的崩溃路径信息中,一行代码中的第一个包是“java”、“android”或者“dalvik”、或者一行代码的前两个包是“com”和“android”,则确定这些行代码为与系统相关的代码,而所有的代码中除去与系统相关的代码即为与应用程序相关的代码。以这样的方式可以确定,图3中所示的多行代码中的每行代码从上至下依次是:与应用程序相关的代码,与应用程序相关的代码,与应用程序相关的代码,与系统相关的代码,…,与系统相关的代码,与系统相关的代码。
根据本发明的实施例,哈希码和权重确定单元130确定对应于与应用程序相关的代码的崩溃片段的权重大于对应于与系统相关的代码的崩溃片段的权重。这是因为,与应用程序相关的代码比与系统相关的代码更重要,因而在计算新崩溃的哈希签名时所占的权重也应当大一些。
图4为根据本发明的实施例的确定每个崩溃片段的哈希码和权重的过程的示意图。如图4所示,哈希码和权重确定单元130可以为每个崩溃片段确定哈希码和权重。例如,从上至下每个崩溃片段的哈希码为“100110”,“110100”,“000101”,“101100”,…,“010010”,“100110”,从上至下每个崩溃片段的权重为W1,W2,W3,W0…,W0,W0。值得注意的是,这里为每个崩溃片段确定的哈希码为6个比特位的哈希码,然而这只是为了便于说明的目的,实际上根据不同的哈希码算法确定的每个崩溃片段的哈希码可能会多于6个比特位,例如32个比特位或者64个比特位。进一步,根据前文所述,哈希码和权重确定单元130可以将每行代码确定为与应用程序相关的代码和与系统相关的代码,并将对应于与应用程序相关的代码的崩溃片段的权重大于对应于与系统相关的代码的崩溃片段的权重。例如,在图4所示的实施例中,将与系统相关的代码的崩溃片段的权重设置为W0,而将与应用程序相关的代码的崩溃片段的权重设置为W1、W2和W3,其中,W1、W2和W3都大于W0。
根据本发明的实施例,哈希码和权重确定单元130可以包括系统代码权重确定单元和应用程序代码权重确定单元。
根据本发明的实施例,系统代码权重确定单元可以确定对应于与系统相关的代码的崩溃片段的权重为W0。
根据本发明的实施例,应用程序代码权重确定单元可以确定对应于与应用程序相关的代码的崩溃片段的集合;对集合中的崩溃片段进行排序,以使得集合中的崩溃片段的顺序与崩溃片段所对应的代码在堆栈跟踪中的顺序相同;以及确定集合中的第i个崩溃片段的权重Wi为:Wi=W0+(n-i+1)t,其中,n为集合中的崩溃片段的数目,t为权重增量并且0<t<W0。
以图4所示的实施例为例,应用程序代码权重确定单元可以确定对应于与应用程序相关的代码的崩溃片段的集合为图4中左侧所示的第一个崩溃片段,第二个崩溃片段,第三个崩溃片段,…。接下来,应用程序代码权重确定单元对集合中的崩溃片段进行排序,即按照第一个崩溃片段,第二个崩溃片段,第三个崩溃片段,…的顺序。接下来,确定这些崩溃片段的权重依次为W1,W2,W3,…。假定集合中只有三个崩溃片段,即n=3,那么根据本发明的实施例可以确定,W1=W0+3t,W2=W0+2t,W3=W0+t。以这种方式,使得对应于与应用程序相关的代码的崩溃片段的权重大于对应于与系统相关的代码的崩溃片段的权重。并且,在对应于与应用程序相关的代码的崩溃片段中,代码越靠近堆栈跟踪的顶端,则其对应的崩溃片段的权重越大。这是因为,代码越靠近堆栈跟踪的顶端,说明该代码越重要,因而在计算新崩溃的哈希签名时所占的权重也应当大一些。
根据本发明的实施例,签名确定单元140可以包括第一确定单元、第二确定单元和第三确定单元。
根据本发明的实施例,第一确定单元可以根据每个崩溃片段的哈希码和权重确定每个崩溃片段的哈希码中的每一个比特位的权重。根据本发明的实施例,当崩溃片段的哈希码中的一个比特位的比特值为“1”时,第一确定单元确定该比特位的权重为该崩溃片段的权重的正值,即权重本身;当崩溃片段的哈希码中的一个比特位的比特值为“0”时,第一确定单元确定该比特位的权重为该崩溃片段的权重的负值。对于每个崩溃片段,第一确定单元都可以执行上述操作,即第一确定单元为每个崩溃片段的哈希码中的每一个比特位都设置权重。
图5为根据本发明的实施例的确定每个崩溃片段的哈希码中的每一个比特位的权重的过程的示意图。图5的右侧示出了每个崩溃片段的哈希码中的每一个比特位的权重。例如,针对第一个崩溃片段,该第一个崩溃片段的哈希码为“100110”,权重为W1。因此,针对第一个崩溃片段的哈希码中的第一个比特位,其比特值为“1”,因而第一确定单元确定第一个比特位的权重为W1的正值,即W1。类似地,针对第一个崩溃片段的哈希码中的第二个比特位,其比特值为“0”,因而第一确定单元确定第二个比特位的权重为W1的负值,即-W1;针对第一个崩溃片段的哈希码中的第三个比特位,其比特值为“0”,因而第一确定单元确定第三个比特位的权重为W1的负值,即-W1;针对第一个崩溃片段的哈希码中的第四个比特位,其比特值为“1”,因而第一确定单元确定第四个比特位的权重为W1的正值,即W1;针对第一个崩溃片段的哈希码中的第五个比特位,其比特值为“1”,因而第一确定单元确定第五个比特位的权重为W1的正值,即W1;针对第一个崩溃片段的哈希码中的第六个比特位,其比特值为“0”,因而第一确定单元确定第六个比特位的权重为W1的负值,即-W1。通过这样的过程,第一确定单元可以确定第一个崩溃片段的哈希码中的六个比特位的权重分别为W1、-W1、-W1、W1、W1和-W1。采用相同的方式,第一确定单元可以确定崩溃路径信息中所有崩溃片段的哈希码中的每一个比特位的权重,如图5的右侧所示。
根据本发明的实施例,第二确定单元可以根据每个崩溃片段的哈希码中的每一个比特位的权重确定每一个比特位的总权重。根据本发明的实施例,第二确定单元确定每一个比特位的总权重为崩溃路径信息中所有崩溃片段的哈希码在该比特位上的权重之和。
图6为根据本发明的实施例的确定新崩溃的哈希签名的过程的示意图。在图6中左侧的图示出了每个崩溃片段的哈希码中的每一个比特位的权重,中间的图示出了确定每一个比特位的总权重的示意图。在图6中,b1,b2,b3,b4,b5和b6表示六个比特位,V1,V2,V3,V4,V5和V6分别表示这六个比特位的总权重。根据本发明的实施例,第二确定单元确定每一个比特位的总权重为所有崩溃片段的哈希码在该比特位上的权重之和。例如,比特位b1的总权重V1为所有崩溃片段的哈希码中的比特位b1的权重之和。以图6所示的实施例为例,V1=W1+W2-W3+W0…-W0+W0。以这种方式,第二确定单元可以确定所有的比特位b1,b2,b3,b4,b5和b6的总权重V1,V2,V3,V4,V5和V6。
根据本发明的实施例,第三确定单元可以根据每一个比特位的总权重确定新崩溃的哈希签名中的每一个比特位的比特值。根据本发明的实施例,当一个比特位的总权重为正值时,第三确定单元确定该比特位的比特值为“1”;当一个比特位的总权重为负值或零值时,第三确定单元确定该比特位的比特值为“0”。
如图6所示,图6中右侧的图示出了哈希签名中的每一个比特位的比特值。以图6所示的实施例为例,根据本发明的实施例,当Vi>0时,bi的比特值为1,否则bi的比特值为0,其中,i={1,2,3,4,5,6}。在图6所示的例子中,假定计算出的V1<0,V2>0,V3<0,V4<0,V5<0并且V6>0,由此可以确定哈希签名中的每一个比特位的比特值分别为“0”,“1”,“0”,“0”,“0”和“1”。因此,第三确定单元可以确定新崩溃的哈希签名为“010001”。由此,第三确定单元可以将确定的新崩溃的哈希签名发送到重复崩溃确定单元150用于确定新崩溃是否为已知崩溃中的一个的重复。
根据本发明的实施例,路径确定单元110可以进一步包括堆栈跟踪获取单元、关联代码确定单元和崩溃路径信息确定单元。
根据本发明的实施例,堆栈跟踪获取单元可以获取新崩溃的堆栈跟踪。这里,堆栈跟踪获取单元可以根据本领域公知的任何方法来获取新崩溃的堆栈跟踪。进一步,堆栈跟踪获取单元获取的堆栈跟踪例如可以是图2(a)所示的简单模式的堆栈跟踪,也可以是图2(b)所示的嵌套模式的堆栈跟踪。在嵌套模式的堆栈跟踪中,存在一行或者多行特定的代码,该特定的代码中包括特定的字符串“caused by”。例如,图2(b)中所示的“caused by:java.Lang.NullPointerException”就是一行特定的代码。值得注意的是,在图2(b)中所示的实施例中,只存在一行包括字符串“caused by”的特定代码,然而,在其它堆栈跟踪中,也可能存在多行包括字符串“caused by”的特定代码。
根据本发明的实施例,关联代码确定单元可以确定新崩溃的堆栈跟踪中的一行或多行代码为与崩溃路径信息相关联的代码。
根据本发明的实施例,关联代码确定单元可以根据新崩溃的堆栈跟踪确定新崩溃的核心异常信息,进而确定核心异常信息中的一行或多行代码为与崩溃路径信息相关联的代码。
根据本发明的实施例,当新崩溃的堆栈跟踪为简单模式的堆栈跟踪时,关联代码确定单元确定堆栈跟踪中所有代码为核心异常信息;当新崩溃的堆栈跟踪为嵌套模式的堆栈跟踪时,关联代码确定单元确定堆栈跟踪中从最后一行特定的代码开始一直到最后一行代码为核心异常信息。例如,在如图2(a)所示的实施例中,关联代码确定单元确定堆栈跟踪中所有代码为核心异常信息。在图2(b)所示的实施例中,关联代码确定单元确定从“causedby:java.Lang.NullPointerException”一直到最后一行代码为核心异常信息。值得注意的是,图2(b)所示的例子中只存在一行包括字符串“caused by”的特定代码,在存在多行包括字符串“caused by”的特定代码的其它示例中,关联代码确定单元确定从最后一个包括字符串“caused by”的特定代码开始一直到最后一行代码为核心异常信息。
根据本发明的实施例,关联代码确定单元可以确定核心异常信息中除去第一行代码以外的所有代码,即从核心异常信息的第二行代码开始直到最后一行代码为与崩溃路径信息相关联的代码。例如,在如图2(a)所示的实施例中,关联代码确定单元确定堆栈跟踪中从第二行代码到最后一行代码为与崩溃路径信息相关联的代码。在图2(b)所示的实施例中,关联代码确定单元确定从“caused by:java.Lang.NullPointerException”下面的一行代码一直到最后一行代码为与崩溃路径信息相关联的代码。
根据本发明的实施例,崩溃路径信息确定单元可以根据与崩溃路径信息相关联的代码确定新崩溃的崩溃路径信息。这里,崩溃路径信息确定单元将崩溃路径信息中的每一行代码分别对应于与崩溃路径信息相关联的代码中的每一行代码。
图7为根据本发明的实施例的基于堆栈跟踪确定崩溃路径信息的过程的示意图。如图7所示,关联代码确定单元确定的与崩溃路径信息相关联的代码已经用方框框出。崩溃路径信息确定单元根据与崩溃路径信息相关联的代码确定出新崩溃的崩溃路径信息如图7中箭头下侧的图中所示。
下面将详细描述崩溃路径信息确定单元如何根据与崩溃路径信息相关联的代码确定新崩溃的崩溃路径信息。
根据本发明的实施例,崩溃路径信息确定单元可以进一步包括预处理单元和合并单元。根据本发明的实施例,预处理单元可以对与崩溃路径信息相关联的代码中的每行代码进行预处理。合并单元可以合并预处理后的与崩溃路径信息相关联代码以确定崩溃路径信息。
根据本发明的实施例,预处理单元可以进一步包括第二判断单元和第二处理单元。
根据本发明的实施例,第二判断单元可以判断代码是与系统相关的代码还是与应用程序相关的代码。前文中提到,哈希码和权重确定单元130可以自己判断崩溃路径信息中的每行代码是与系统相关的代码还是与应用程序相关的代码,也可以从其它单元获取这样的信息。在这个实施例中,第二判断单元也可以判断与崩溃路径信息相关联的代码中的每行代码是与系统相关的代码还是与应用程序相关的代码。这里,第二判断单元可以采用与哈希码和权重确定单元130相类似的方法来判断每行代码是与系统相关的代码还是与应用程序相关的代码,在此不再赘述。例如,第二判断单元可以根据与崩溃路径信息相关联的代码中的每行代码中的第一个或者前两个包来确定与系统相关的代码,并且确定崩溃路径信息的一行或多行代码中除去与系统相关的代码为与应用程序相关的代码。进一步,第二判断单元还可以将这样的判断结果发送到哈希码和权重确定单元130。
根据本发明的实施例,第二处理单元可以用于当代码是与系统相关的代码时,对代码进行去重处理、删除代码中的新崩溃的出错行数以及删除代码中的匿名类中的数字,并且当代码是与应用程序相关的代码时对代码进行去重处理。
以图7所示的实施例为例,在与崩溃路径信息相关联的代码中的第四行代码中,即“at.android.app.Activity.performDestroy{Activity.java:5436}”,最后的数字“5436”表示新崩溃的出错行数,由于该行代码是与系统相关的代码,因此在不同的系统中,重复的崩溃的出错行数可能是不同的,因此这个行数信息对于判断是否重复的崩溃没有实质的作用。因此,第二处理单元将该出错行数信息删除。进一步,在这行代码中,后面的“Activity”与前面的“Activity”产生了重复,因此,第二处理单元可以进行去重处理。在与崩溃路径信息相关联的代码中的第八行代码中,即“at.android.app.ActivityThread.access$1400{ActivityThread.java:151}”,“android.app.ActivityThread.access”表示一个匿名类,因此,第二处理单元将删除后面的数字“1400”。而当代码是与应用程序相关的代码时,第二处理单元仅对代码进行去重处理,这与对与系统相关的代码进行去重处理是类似的。
根据本发明的实施例,当第二处理单元对每行代码进行了处理之后,可以将处理后的每行代码发送到合并单元,从而使得合并单元合并预处理后的代码以确定崩溃路径信息。例如,合并单元可以将预处理后的每行代码用分隔符“/”分隔,获得最终的崩溃路径信息,如图7所示。
根据本发明的实施例,重复崩溃确定单元150可以包括第四确定单元和第五确定单元。
根据本发明的实施例,第四确定单元可以用于确定新崩溃的崩溃类型信息和崩溃点信息。这里,崩溃类型信息可以指示崩溃的类型,崩溃类型可以包括本领域公知的那些崩溃类型,例如空指针异常、内存不足错误和非法参数异常等。崩溃点信息可以指示崩溃路径信息中最重要的信息。
根据本发明的实施例,第五确定单元可以根据新崩溃的崩溃类型信息、崩溃点信息和哈希签名确定新崩溃是否为已知崩溃中的一个的重复。
前文中提到,重复崩溃确定单元150可以根据哈希签名确定新崩溃是否为已知崩溃中的一个的重复。在一个实施例中,重复崩溃确定单元150的第五确定单元可以执行这个功能。这里,第五确定单元将新崩溃的哈希签名与所有已知崩溃的哈希签名进行比较,根据比较的结果来确定新崩溃是否为已知崩溃中的一个的重复。例如,第五确定单元可以将新崩溃的哈希签名与所有已知崩溃的哈希签名进行异或运算,当新崩溃的哈希签名与已知崩溃中的一个的哈希签名相异或的结果中比特值为“1”的比特位的个数大于预定阈值时,第五确定单元确定新崩溃是已知崩溃中的所述一个的重复。作为一个示例,新崩溃的哈希签名为“010001”,已知崩溃中的一个的哈希签名为“101101”,两者异或的结果为“111100”。因此,异或的结果中比特值为“1”的比特位的个数为4,假定预定阈值为3,那么第五确定单元确定该新崩溃是已知崩溃中的这个崩溃的重复。
在上述实施例中,第五确定单元需要将新崩溃的哈希签名与所有已知崩溃的哈希签名进行比较,运算量较大。因此,为了提高运算速度,根据本发明的另一个实施例,重复崩溃确定单元150还可以包括第四确定单元用于确定新崩溃的崩溃类型信息和崩溃点信息,进而第五确定单元可以根据新崩溃的崩溃类型信息、崩溃点信息和哈希签名确定新崩溃是否为已知崩溃中的一个的重复,从而可以减少运算量,提高运算速度。这部分内容将在后续说明中详细介绍。
根据本发明的实施例,第四确定单元可以根据核心异常信息确定新崩溃的崩溃类型信息和崩溃点信息。
前文中提到,关联代码确定单元可以根据新崩溃的堆栈跟踪确定新崩溃的核心异常信息。根据本发明的一个实施例,第四确定单元可以从关联代码确定单元获取核心异常信息。根据本发明的另一个实施例,第四确定单元也可以根据新崩溃的堆栈跟踪确定新崩溃的核心异常信息。例如,第四确定单元可以采用与关联代码确定单元类似的方法来确定核心异常信息。进一步,第四确定单元可以根据核心异常信息确定新崩溃的崩溃类型信息和崩溃点信息。
根据本发明的实施例,第四确定单元可以根据核心异常信息中的第一行代码确定崩溃类型信息。在一个实施例中,第四确定单元可以根据核心异常信息中的第一行代码中的最后一个包来确定崩溃类型信息。一般来说,核心异常信息中的第一行代码的最后一个包为指示崩溃类型的崩溃类型信息,诸如“NullPointerException”、“OutOfMemoryError”和“IllegalArgumentException”等。当第四确定单元获取了这样的崩溃类型信息,即可确定崩溃类型。例如,“NullPointerException”表示崩溃类型为空指针异常;“OutOfMemoryError”表示崩溃类型为内存不足错误,以及“IllegalArgumentException”表示崩溃类型为非法参数异常等。
根据本发明的实施例,第四确定单元可以根据核心异常信息中的第一行与应用程序相关的代码确定崩溃点信息。
前文中提到,哈希码和权重确定单元130可以将崩溃路径信息中的一行或多行代码中的每行代码分为与应用程序相关的代码和与系统相关的代码。这里,第四确定单元可以利用与哈希码和权重确定单元130类似的方法来确定核心异常信息中的第一行与应用程序相关的代码。即,一行代码中的前两个包中存在“java”、“android”或者“dalvik”,则认为该行代码是与系统相关的代码,除去这样的代码即为与应用程序相关的代码。第四确定单元只需要寻找到第一行与应用程序相关的代码,进而可以确定崩溃点信息。
根据本发明的实施例,第四确定单元可以对第一行与应用程序相关的代码进行去重处理,从而将去重处理后的代码作为崩溃点信息。这里,第四确定单元对第一行与应用程序相关的代码进行的去重处理可以类似于第二处理单元进行的去重处理,在此不再赘述。
图8为根据本发明的实施例的基于核心异常信息确定崩溃类型、崩溃点和崩溃路径信息的过程的示意图。
如图8所示,箭头上侧的图表示新崩溃的堆栈跟踪,该堆栈跟踪中的核心异常信息已用方框框出。接下来,根据核心异常信息中的第一行信息确定崩溃类型信息为“NullPointerException”,进而确定崩溃类型为空指针异常。接下来,根据核心异常信息中的第一行与应用程序相关的代码确定崩溃点信息为“com.institution.utility.ImageRefCache.clear:63”。接下来,确定核心异常信息中的第二行至最后一行代码为与崩溃路径信息相关联的代码,从而可以根据与崩溃路径信息相关联的代码确定崩溃路径信息。
下面具体描述第五确定单元如何根据新崩溃的崩溃类型信息、崩溃点信息和哈希签名确定新崩溃是否为已知崩溃中的一个的重复。
根据本发明的实施例,根据已知崩溃的崩溃类型信息将已知崩溃划分为一个或多个组,根据已知崩溃的崩溃点信息将每个组划分为一个或多个子组,并且每个子组包括一个或多个代表性路径。
根据本发明的实施例,可以将具有相同崩溃类型的崩溃划分到同一个组中,并且可以将具有相同崩溃点信息的崩溃划分到同一个子组中。根据本发明的实施例,每个子组中的一个或多个代表性路径中的每个代表性路径为将一个或者多个重复崩溃的崩溃路径信息进行合并后获得的路径信息,其代表了这一类重复崩溃的崩溃路径信息。
图9为根据本发明的实施例的已知崩溃的存储结构的示意图。如图9所示,已知的崩溃包括多个组。作为一个示例,组1中的所有崩溃的崩溃类型为空指针异常,组2中的所有崩溃的崩溃类型为内存不足错误,组3中的所有崩溃的崩溃类型为非法参数异常。如图9所示,组1包括多个子组。作为一个示例,子组1中的所有崩溃的崩溃点信息为“com.institution.utility.ImageRefCache.clear:63”。如图9所示,子组1中包括多个代表性路径。值得注意的是,虽然图9中只示出了已知崩溃包括三个组,组1中包括两个子组,子组1并中包括四个代表性路径的情况。但是本领域技术人员应当理解,已知崩溃可以包括其它数目的组,每个组也可以包括其它数目的子组,每个子组还可以包括其它数目的代表性路径。
根据本发明的实施例,第五确定单元可以包括第一判断单元和第一处理单元。
根据本发明的实施例,第一判断单元可以根据新崩溃的崩溃类型信息确定是否存在与新崩溃对应的组,并且可以当存在与新崩溃对应的组时根据新崩溃的崩溃点信息确定是否存在与新崩溃对应的子组。例如,如果新崩溃的崩溃类型信息指示新崩溃的崩溃类型与某个已知崩溃的组中的崩溃的崩溃类型相同,则第一判断单元确定该组是与新崩溃对应的组。进一步,如果新崩溃的崩溃点信息与该组中的某个子组中的已知崩溃的崩溃点信息相同,那么第一判断单元确定该子组是与新崩溃对应的子组。进一步,第一判断单元可以将确定的与新崩溃对应的子组的相关信息发送到第一处理单元。
根据本发明的实施例,当存在与新崩溃对应的子组时,第一处理单元可以确定该子组中的每个代表性路径的哈希签名;比较新崩溃的哈希签名与该子组中的每个代表性路径的哈希签名;以及根据比较结果确定新崩溃是否为已知崩溃中的一个的重复。这里,第一处理单元可以从第一判断单元获取与新崩溃对应的子组相关的信息,从而获取该子组中的所有代表性路径的哈希签名。计算代表性路径的哈希签名的方法可以与根据崩溃路径信息计算哈希签名类似,在此不再赘述。进一步,将新崩溃的哈希签名与子组中的每个代表性路径的哈希签名相比较进而确定是否为重复崩溃的方法也与前文所述的将新崩溃的哈希签名与所有已知崩溃的哈希签名相比较类似,在此也不再赘述。
根据本发明的实施例,与新崩溃对应的子组中存储的代表性路径所代表的崩溃与新崩溃的崩溃类型和崩溃点信息都相同。因此,只需要将新崩溃的哈希签名与这个子组中存储的代表性路径的哈希签名相比较即可。这样一来,可以大大减少计算量,提高计算速度。
根据本发明的实施例,当不存在与新崩溃对应的组时,或者当不存在与新崩溃对应的子组时,第一处理单元还可以确定新崩溃不是已知崩溃中的一个的重复。
根据本发明的实施例,如果不存在与新崩溃对应的组,则说明所有的已知崩溃的崩溃类型都与新崩溃不同;如果不存在与新崩溃对应的子组,则说明所有的已知崩溃的崩溃点信息都与新崩溃不同。在这两种情况下,第一处理单元可以直接确定新崩溃不是已知崩溃中的一个的重复。从而,进一步减少了计算量,提高计算速度。
根据本发明的实施例,当确定新崩溃不是已知崩溃中的一个的重复时,第五确定单元还可以添加该新崩溃。
根据本发明的实施例,当存在与新崩溃对应的组而不存在与新崩溃对应的子组时,将该新崩溃作为一个新的子组添加到与新崩溃对应的组中;当不存在与新崩溃对应的组时,将该新崩溃作为一个新的组添加进去。
根据本发明的实施例,第五确定单元可以将新崩溃的崩溃路径信息添加为新的代表性路径。
在这个实施例中,将新崩溃的崩溃路径信息添加为新的代表性路径的方式可以采用“路径图”的形式,也可以采用其它表示代表性路径的形式。例如,可以用一个点来表示崩溃路径信息中的一行代码,用两个点之间的箭头来表示两行代码之间的调用关系,即箭头末端的点所表示的代码调用箭头前端的点所表示的代码。如图9所示,在子组1中的第一条代表性路径中,包括四行代码,第四个点代表的代码调用第三个点代表的代码,第三个点代表的代码调用第二个点代表的代码,以此类推。
根据本发明的实施例,当确定新崩溃是已知崩溃中的一个的重复时,第五确定单元还可以将所述新崩溃与已知崩溃中的所述一个进行合并。
根据本发明的实施例,第五确定单元可以根据新崩溃的崩溃路径信息更新与新崩溃对应的子组中的代表性路径。
前文中提到,代表性路径为将一个或者多个重复崩溃的崩溃路径信息进行合并后获得的路径信息,其代表了这一类重复崩溃的崩溃路径信息。因而,当新崩溃是已知崩溃中的一个的重复时,可以将该新崩溃的崩溃路径信息与对应的代表性路径进行合并,从而使得这一类崩溃的代表性路径得到更新。这里,可以首先确定新崩溃的代表性路径,然后将新崩溃的代表性路径与对应的子组中的代表性路径相合并。
例如,如果新崩溃的哈希签名与子组1中的第一条代表性路径的哈希签名的比较结果说明新崩溃是第一条代表性路径所代表的崩溃的重复崩溃,那么第五确定单元可以根据新崩溃的崩溃路径信息确定新崩溃的代表性路径,并将新崩溃的代表性路径与第一条代表性路径相合并。
图10为根据本发明的实施例的合并崩溃的过程的示意图。在图10所示的实施例中,加号左边的路径为与新崩溃重复的代表性路径,加号右边的路径为新崩溃的代表性路径,也就是说,在新崩溃的崩溃路径信息中包括a、d、e、f和g五行代码,并且a为崩溃路径信息中的第一行代码,g为崩溃路径信息中的最后一行代码。a调用d,d调用e,e调用f,f调用g。
如图10所示,将新崩溃的代表性路径与已知崩溃的代表性路径相合并的过程可以为:留下在新崩溃的代表性路径和已知崩溃的代表性路径中都存在的点,在剩下的点处标记空点。如图10所示,在合并后的代表性路径中,留下了a、d、e和f四个点,并且在点b和g处标记空点。
根据本发明的实施例,采用“路径图”的形式来表示崩溃路径信息和代表性路径信息十分简单,能够清楚明了地表示出崩溃的崩溃路径信息。进一步,在存储已知崩溃的时候,也采用这种结构来存储,并且将一类重复崩溃存储为一个代表性路径。由此,可以大大减少存储空间,也便于提高比较新崩溃与已知崩溃的速度。
根据本发明的实施例,存储已知崩溃的过程可以如下:初始时存储器中的组、子组和代表性路径为空。将创建相应的组和子组,将第一个崩溃的崩溃路径信息以“路径图”的形式存储为代表性路径;将第二个崩溃的哈希签名与第一个崩溃的代表性路径的哈希签名相比较,如果第二个崩溃是第一个崩溃的重复崩溃,则将第二个崩溃的崩溃路径信息与第一个崩溃的代表性路径相合并,如果第二个崩溃不是第一个崩溃的重复崩溃,那么将第二个崩溃的崩溃路径信息以“路径图”的形式存储为代表性路径到新的组或者新的子组中,以此类推。由此可以实现对崩溃的分组和更新崩溃的分组。
下面结合图11来描述根据本发明的实施例的用于对应用程序的重复崩溃进行检测的方法。如图11所示,在步骤S1110中,确定新崩溃的崩溃路径信息。
接下来,在步骤S1120中,对崩溃路径信息进行分割,以获取一个或多个崩溃片段。
接下来,在步骤S1130中,确定一个或多个崩溃片段中的每个崩溃片段的哈希码和权重。
接下来,在步骤S1140中,根据一个或多个崩溃片段中的每个崩溃片段的哈希码和权重确定新崩溃的哈希签名。
接下来,在步骤S1150中,根据哈希签名确定新崩溃是否为已知崩溃中的一个的重复。
根据本发明的实施例,崩溃路径信息对应一行或多行代码,并且每个崩溃片段对应一行或多行代码中的一行代码,其中,确定每个崩溃片段的权重包括:确定对应于与应用程序相关的代码的崩溃片段的权重大于对应于与系统相关的代码的崩溃片段的权重,并且其中,根据每个崩溃片段的哈希码和权重确定新崩溃的哈希签名包括:根据每个崩溃片段的哈希码和权重确定每个崩溃片段的哈希码中的每一个比特位的权重;根据每个崩溃片段的哈希码中的每一个比特位的权重确定每一个比特位的总权重;以及根据所述每一个比特位的总权重确定新崩溃的哈希签名中的每一个比特位的比特值。
根据本发明的实施例,确定新崩溃的崩溃路径信息进一步包括:获取新崩溃的堆栈跟踪;确定新崩溃的堆栈跟踪中的一行或多行代码为与崩溃路径信息相关联的代码;以及根据与崩溃路径信息相关联的代码确定新崩溃的崩溃路径信息。
根据本发明的实施例,确定每个崩溃片段的权重进一步包括:确定对应于与系统相关的代码的崩溃片段的权重为W0;确定对应于与应用程序相关的代码的崩溃片段的集合;对集合中的崩溃片段进行排序,以使得集合中的崩溃片段的顺序与崩溃片段所对应的代码在堆栈跟踪中的顺序相同;以及确定集合中的第i个崩溃片段的权重Wi为:Wi=W0+(n-i+1)t,其中,n为集合中的崩溃片段的数目,t为权重增量并且0<t<W0。
根据本发明的实施例,根据哈希签名确定新崩溃是否为已知崩溃中的一个的重复进一步包括:确定新崩溃的崩溃类型信息和崩溃点信息;根据新崩溃的崩溃类型信息、崩溃点信息和哈希签名确定新崩溃是否为已知崩溃中的一个的重复。
根据本发明的实施例,方法进一步包括:根据已知崩溃的崩溃类型信息将已知崩溃划分为一个或多个组,根据已知崩溃的崩溃点信息将每个组划分为一个或多个子组,并且每个子组包括一个或多个代表性路径,并且其中,确定新崩溃是否为已知崩溃中的一个的重复进一步包括:根据新崩溃的崩溃类型信息确定是否存在与新崩溃对应的组;当存在与新崩溃对应的组时,根据新崩溃的崩溃点信息确定是否存在与新崩溃对应的子组,当存在与新崩溃对应的子组时,确定子组中的每个代表性路径的哈希签名;比较新崩溃的哈希签名与子组中的每个代表性路径的哈希签名;以及根据比较结果确定新崩溃是否为已知崩溃中的一个的重复。
根据本发明的实施例,方法进一步包括:当不存在与新崩溃对应的组时,或者当不存在与新崩溃对应的子组时,确定新崩溃不是已知崩溃中的一个的重复。
根据本发明的实施例,根据与崩溃路径信息相关联的代码确定新崩溃的崩溃路径信息进一步包括:对与崩溃路径信息相关联的代码中的每行代码进行预处理;以及合并预处理后的与崩溃路径信息相关联代码以确定崩溃路径信息。
根据本发明的实施例,对与崩溃路径信息相关联的代码中的每行代码进行预处理包括:判断代码是与系统相关的代码还是与应用程序相关的代码;当代码是与系统相关的代码时,对代码进行去重处理;删除代码中的新崩溃的出错行数;以及删除代码中的匿名类中的数字;当代码是与应用程序相关的代码时,对代码进行去重处理。
根据本发明的实施例,方法进一步包括:根据新崩溃的堆栈跟踪确定新崩溃的核心异常信息;确定核心异常信息中的一行或多行代码为与崩溃路径信息相关联的代码;以及根据核心异常信息确定新崩溃的崩溃类型信息和崩溃点信息。
根据本发明的实施例,将核心异常信息中的每行代码分为与应用程序相关的代码和与系统相关的代码;其中,确定新崩溃的崩溃点信息进一步包括:根据核心异常信息中的第一行与应用程序相关的代码确定崩溃点信息,并且其中,确定新崩溃的崩溃类型信息进一步包括:根据核心异常信息中的第一行代码确定崩溃类型信息。
根据本发明的实施例,方法进一步包括:当确定新崩溃是已知崩溃中的一个的重复时,将新崩溃与已知崩溃中的一个进行合并;以及当确定新崩溃不是已知崩溃中的一个的重复时,添加新崩溃。
根据本发明的实施例,将新崩溃与已知崩溃中的一个进行合并进一步包括:根据新崩溃的崩溃路径信息更新与新崩溃对应的子组中的代表性路径;并且其中,添加新崩溃包括:将新崩溃的崩溃路径信息添加为新的代表性路径。
根据本发明的实施例的用于对应用程序的重复崩溃进行检测的方法的上述步骤的各种具体实施方式前面已经作过详细描述,在此不再重复说明。
由此可见,使用根据本发明的用于对应用程序的重复崩溃进行检测的装置,能够根据崩溃路径信息中的每个崩溃片段的哈希码和权重确定新崩溃的哈希签名,从而根据新崩溃的哈希签名确定新崩溃是否是重复崩溃。这样一来,为每个新崩溃都确定一个哈希签名,根据哈希签名即可确定是否是重复崩溃,这种方法相比于传统的方法实现简单,计算量小。同时,能够可靠地将重复的崩溃和近似重复的崩溃都检测出来。进一步,采用“路径图”的形式来表示崩溃路径信息和代表性路径信息,能够清楚明了地表示出崩溃的崩溃路径信息。在存储已知崩溃的时候,也采用这种结构来存储,并且将一类重复崩溃存储为一个代表性路径。由此,可以大大减少存储空间,也便于提高比较新崩溃与已知崩溃的速度。因此,使用根据本发明的用于对应用程序的重复崩溃进行检测的装置能够快速可靠地实现崩溃的自动分类。
显然,根据本发明的用于对应用程序的重复崩溃进行检测的方法的各个操作过程可以以存储在各种机器可读的存储介质中的计算机可执行程序的方式实现。
而且,本发明的目的也可以通过下述方式实现:将存储有上述可执行程序代码的存储介质直接或者间接地提供给系统或设备,并且该系统或设备中的计算机或者中央处理单元(CPU)读出并执行上述程序代码。此时,只要该系统或者设备具有执行程序的功能,则本发明的实施方式不局限于程序,并且该程序也可以是任意的形式,例如,目标程序、解释器执行的程序或者提供给操作系统的脚本程序等。
上述这些机器可读存储介质包括但不限于:各种存储器和存储单元,半导体设备,磁盘单元例如光、磁和磁光盘,以及其它适于存储信息的介质等。
另外,计算机通过连接到因特网上的相应网站,并且将依据本发明的计算机程序代码下载和安装到计算机中然后执行该程序,也可以实现本发明的技术方案。
图12为其中可以实现根据本发明的用于对应用程序的重复崩溃进行检测的装置和方法的通用个人计算机的示例性结构的框图。
如图12所示,CPU 1201根据只读存储器(ROM)1202中存储的程序或从存储部分1208加载到随机存取存储器(RAM)1203的程序执行各种处理。在RAM 1203中,也根据需要存储当CPU 1201执行各种处理等等时所需的数据。CPU 1201、ROM 1202和RAM 1203经由总线1204彼此连接。输入/输出接口1205也连接到总线1204。
下述部件连接到输入/输出接口1205:输入部分1206(包括键盘、鼠标等等)、输出部分1207(包括显示器,比如阴极射线管(CRT)、液晶显示器(LCD)等,以及扬声器等)、存储部分1208(包括硬盘等)、通信部分1209(包括网络接口卡比如LAN卡、调制解调器等)。通信部分1209经由网络比如因特网执行通信处理。根据需要,驱动器1210也可连接到输入/输出接口1205。可拆卸介质1211比如磁盘、光盘、磁光盘、半导体存储器等等根据需要被安装在驱动器1210上,使得从中读出的计算机程序根据需要被安装到存储部分1208中。
在通过软件实现上述系列处理的情况下,从网络比如因特网或存储介质比如可拆卸介质1211安装构成软件的程序。
本领域的技术人员应当理解,这种存储介质不局限于图12所示的其中存储有程序、与设备相分离地分发以向用户提供程序的可拆卸介质1211。可拆卸介质1211的示例包含磁盘(包含软盘(注册商标))、光盘(包含光盘只读存储器(CD-ROM)和数字通用盘(DVD))、磁光盘(包含迷你盘(MD)(注册商标))和半导体存储器。或者,存储介质可以是ROM 1202、存储部分1208中包含的硬盘等等,其中存有程序,并且与包含它们的设备一起被分发给用户。
在本发明的系统和方法中,显然,各单元或各步骤是可以分解和/或重新组合的。这些分解和/或重新组合应视为本发明的等效方案。并且,执行上述系列处理的步骤可以自然地按照说明的顺序按时间顺序执行,但是并不需要一定按照时间顺序执行。某些步骤可以并行或彼此独立地执行。
以上虽然结合附图详细描述了本发明的实施例,但是应当明白,上面所描述的实施方式只是用于说明本发明,而并不构成对本发明的限制。对于本领域的技术人员来说,可以对上述实施方式作出各种修改和变更而没有背离本发明的实质和范围。因此,本发明的范围仅由所附的权利要求及其等效含义来限定。
关于包括以上实施例的实施方式,还公开下述的附记:
附记1.一种用于对应用程序的重复崩溃进行检测的装置,包括:
路径确定单元,用于确定新崩溃的崩溃路径信息;
路径分割单元,用于对所述崩溃路径信息进行分割,以获取一个或多个崩溃片段;
哈希码和权重确定单元,用于确定所述一个或多个崩溃片段中的每个崩溃片段的哈希码和权重;
签名确定单元,用于根据所述一个或多个崩溃片段中的每个崩溃片段的哈希码和权重确定所述新崩溃的哈希签名;以及
重复崩溃确定单元,用于根据所述哈希签名确定所述新崩溃是否为已知崩溃中的一个的重复。
附记2.根据附记1所述的装置,其中,所述崩溃路径信息对应一行或多行代码,并且每个崩溃片段对应所述一行或多行代码中的一行代码,
其中,所述哈希码和权重确定单元确定对应于与应用程序相关的代码的崩溃片段的权重大于对应于与系统相关的代码的崩溃片段的权重,并且
其中,所述签名确定单元包括:
第一确定单元,用于根据每个崩溃片段的哈希码和权重确定每个崩溃片段的哈希码中的每一个比特位的权重;
第二确定单元,用于根据所述每个崩溃片段的哈希码中的每一个比特位的权重确定每一个比特位的总权重;以及
第三确定单元,用于根据所述每一个比特位的总权重确定所述新崩溃的哈希签名中的每一个比特位的比特值。
附记3.根据附记2所述的装置,其中,所述路径确定单元进一步包括:
堆栈跟踪获取单元,用于获取所述新崩溃的堆栈跟踪;
关联代码确定单元,用于确定所述新崩溃的堆栈跟踪中的一行或多行代码为与所述崩溃路径信息相关联的代码;以及
崩溃路径信息确定单元,用于根据与所述崩溃路径信息相关联的代码确定所述新崩溃的崩溃路径信息。
附记4.根据附记3所述的装置,其中,所述哈希码和权重确定单元包括:
系统代码权重确定单元,用于确定对应于与系统相关的代码的崩溃片段的权重为W0;以及
应用程序代码权重确定单元,用于确定对应于与应用程序相关的代码的崩溃片段的集合;对所述集合中的崩溃片段进行排序,以使得所述集合中的崩溃片段的顺序与所述崩溃片段所对应的代码在所述堆栈跟踪中的顺序相同;以及确定所述集合中的第i个崩溃片段的权重Wi为:Wi=W0+(n-i+1)t,其中,n为所述集合中的崩溃片段的数目,t为权重增量并且0<t<W0。
附记5.根据附记1所述的装置,其中,所述重复崩溃确定单元进一步包括:
第四确定单元,用于确定所述新崩溃的崩溃类型信息和崩溃点信息;以及
第五确定单元,用于根据所述新崩溃的崩溃类型信息、崩溃点信息和所述哈希签名确定所述新崩溃是否为已知崩溃中的一个的重复。
附记6.根据附记5所述的装置,其中,根据所述已知崩溃的崩溃类型信息将所述已知崩溃划分为一个或多个组,根据所述已知崩溃的崩溃点信息将每个组划分为一个或多个子组,并且每个子组包括一个或多个代表性路径;并且,
其中,所述第五确定单元进一步包括:
第一判断单元,用于根据所述新崩溃的崩溃类型信息确定是否存在与所述新崩溃对应的组,并且用于当存在与所述新崩溃对应的组时根据所述新崩溃的崩溃点信息确定是否存在与所述新崩溃对应的子组;以及
第一处理单元,用于当存在与所述新崩溃对应的子组时,确定所述子组中的每个代表性路径的哈希签名;比较所述新崩溃的哈希签名与所述子组中的每个代表性路径的哈希签名;以及根据比较结果确定所述新崩溃是否为已知崩溃中的一个的重复。
附记7.根据附记6所述的装置,其中,所述第一处理单元进一步用于:当不存在与所述新崩溃对应的组时,或者当不存在与所述新崩溃对应的子组时,确定所述新崩溃不是已知崩溃中的一个的重复。
附记8.根据附记3所述的装置,其中,所述崩溃路径信息确定单元进一步包括:
预处理单元,用于对所述与所述崩溃路径信息相关联的代码中的每行代码进行预处理;以及
合并单元,用于合并预处理后的与所述崩溃路径信息相关联代码以确定所述崩溃路径信息。
附记9.根据附记8所述的装置,其中,所述预处理单元进一步包括:
第二判断单元,用于判断代码是与系统相关的代码还是与应用程序相关的代码;以及
第二处理单元,用于当所述代码是与系统相关的代码时,对所述代码进行去重处理、删除所述代码中的所述新崩溃的出错行数以及删除所述代码中的匿名类中的数字,并且当所述代码是与应用程序相关的代码时对所述代码进行去重处理。
附记10.一种用于对应用程序的重复崩溃进行检测的方法,包括:
确定新崩溃的崩溃路径信息;
对所述崩溃路径信息进行分割,以获取一个或多个崩溃片段;
确定所述一个或多个崩溃片段中的每个崩溃片段的哈希码和权重;
根据所述一个或多个崩溃片段中的每个崩溃片段的哈希码和权重确定所述新崩溃的哈希签名;以及
根据所述哈希签名确定所述新崩溃是否为已知崩溃中的一个的重复。
附记11.根据附记10所述的方法,其中,所述崩溃路径信息对应一行或多行代码,并且每个崩溃片段对应所述一行或多行代码中的一行代码,
其中,确定每个崩溃片段的权重包括:确定对应于与应用程序相关的代码的崩溃片段的权重大于对应于与系统相关的代码的崩溃片段的权重,并且
其中,根据每个崩溃片段的哈希码和权重确定所述新崩溃的哈希签名包括:
根据每个崩溃片段的哈希码和权重确定每个崩溃片段的哈希码中的每一个比特位的权重;
根据所述每个崩溃片段的哈希码中的每一个比特位的权重确定每一个比特位的总权重;以及
根据所述每一个比特位的总权重确定所述新崩溃的哈希签名中的每一个比特位的比特值。
附记12.根据附记11所述的方法,其中,确定所述新崩溃的崩溃路径信息进一步包括:
获取所述新崩溃的堆栈跟踪;
确定所述新崩溃的堆栈跟踪中的一行或多行代码为与所述崩溃路径信息相关联的代码;以及
根据与所述崩溃路径信息相关联的代码确定所述新崩溃的崩溃路径信息。
附记13.根据附记12所述的方法,其中,确定每个崩溃片段的权重进一步包括:
确定对应于与系统相关的代码的崩溃片段的权重为W0;
确定对应于与应用程序相关的代码的崩溃片段的集合;
对所述集合中的崩溃片段进行排序,以使得所述集合中的崩溃片段的顺序与所述崩溃片段所对应的代码在所述堆栈跟踪中的顺序相同;以及
确定所述集合中的第i个崩溃片段的权重Wi为:Wi=W0+(n-i+1)t,其中,n为所述集合中的崩溃片段的数目,t为权重增量并且0<t<W0。
附记14.根据附记10所述的方法,其中,根据所述哈希签名确定所述新崩溃是否为已知崩溃中的一个的重复进一步包括:
确定所述新崩溃的崩溃类型信息和崩溃点信息;
根据所述新崩溃的崩溃类型信息、崩溃点信息和所述哈希签名确定所述新崩溃是否为已知崩溃中的一个的重复。
附记15.根据附记14所述的方法,进一步包括:
根据所述已知崩溃的崩溃类型信息将所述已知崩溃划分为一个或多个组,根据所述已知崩溃的崩溃点信息将每个组划分为一个或多个子组,并且每个子组包括一个或多个代表性路径,并且
其中,确定所述新崩溃是否为已知崩溃中的一个的重复进一步包括:
根据所述新崩溃的崩溃类型信息确定是否存在与所述新崩溃对应的组;
当存在与所述新崩溃对应的组时,
根据所述新崩溃的崩溃点信息确定是否存在与所述新崩溃对应的子组,
当存在与所述新崩溃对应的子组时,
确定所述子组中的每个代表性路径的哈希签名;
比较所述新崩溃的哈希签名与所述子组中的每个代表性路径的哈希签名;以及
根据比较结果确定所述新崩溃是否为已知崩溃中的一个的重复。
附记16.根据附记15所述的方法,进一步包括:当不存在与所述新崩溃对应的组时,或者当不存在与所述新崩溃对应的子组时,确定所述新崩溃不是已知崩溃中的一个的重复。
附记17.根据附记12所述的方法,其中,根据与所述崩溃路径信息相关联的代码确定所述新崩溃的崩溃路径信息进一步包括:
对所述与所述崩溃路径信息相关联的代码中的每行代码进行预处理;以及
合并预处理后的与所述崩溃路径信息相关联代码以确定所述崩溃路径信息。
附记18.根据附记17所述的方法,其中,对所述与所述崩溃路径信息相关联的代码中的每行代码进行预处理包括:
判断代码是与系统相关的代码还是与应用程序相关的代码;
当所述代码是与系统相关的代码时,
对所述代码进行去重处理;
删除所述代码中的所述新崩溃的出错行数;以及
删除所述代码中的匿名类中的数字;
当所述代码是与应用程序相关的代码时,
对所述代码进行去重处理。
附记19.根据附记11所述的方法,进一步包括:
根据所述新崩溃的堆栈跟踪确定所述新崩溃的核心异常信息;
确定所述核心异常信息中的一行或多行代码为与所述崩溃路径信息相关联的代码;以及
根据所述核心异常信息确定所述新崩溃的崩溃类型信息和崩溃点信息。
附记20.一种机器可读存储介质,其上携带有包括存储在其中的机器可读指令代码的程序产品,其中,所述指令代码当由计算机读取和执行时,能够使所述计算机执行根据附记10-19中任何一项所述的方法。
Claims (10)
1.一种用于对应用程序的重复崩溃进行检测的装置,包括:
路径确定单元,用于确定新崩溃的崩溃路径信息;
路径分割单元,用于对所述崩溃路径信息进行分割,以获取一个或多个崩溃片段;
哈希码和权重确定单元,用于确定所述一个或多个崩溃片段中的每个崩溃片段的哈希码和权重;
签名确定单元,用于根据所述一个或多个崩溃片段中的每个崩溃片段的哈希码和权重确定所述新崩溃的哈希签名;以及
重复崩溃确定单元,用于根据所述哈希签名确定所述新崩溃是否为已知崩溃中的一个的重复。
2.根据权利要求1所述的装置,其中,所述崩溃路径信息对应一行或多行代码,并且所述路径分割单元对崩溃路径信息进行分割以使得每个崩溃片段对应所述一行或多行代码中的一行代码,
其中,所述哈希码和权重确定单元确定对应于与应用程序相关的代码的崩溃片段的权重大于对应于与系统相关的代码的崩溃片段的权重,并且其中,所述签名确定单元包括:
第一确定单元,用于根据每个崩溃片段的哈希码和权重确定每个崩溃片段的哈希码中的每一个比特位的权重;
第二确定单元,用于根据所述每个崩溃片段的哈希码中的每一个比特位的权重确定每一个比特位的总权重;以及
第三确定单元,用于根据所述每一个比特位的总权重确定所述新崩溃的哈希签名中的每一个比特位的比特值。
3.根据权利要求2所述的装置,其中,所述路径确定单元进一步包括:
堆栈跟踪获取单元,用于获取所述新崩溃的堆栈跟踪;
关联代码确定单元,用于确定所述新崩溃的堆栈跟踪中的一行或多行代码为与所述崩溃路径信息相关联的代码;以及
崩溃路径信息确定单元,用于根据与所述崩溃路径信息相关联的代码确定所述新崩溃的崩溃路径信息。
4.根据权利要求3所述的装置,其中,所述哈希码和权重确定单元包括:
系统代码权重确定单元,用于确定对应于与系统相关的代码的崩溃片段的权重为W0;以及
应用程序代码权重确定单元,用于确定对应于与应用程序相关的代码的崩溃片段的集合;对所述集合中的崩溃片段进行排序,以使得所述集合中的崩溃片段的顺序与所述崩溃片段所对应的代码在所述堆栈跟踪中的顺序相同;以及确定所述集合中的第i个崩溃片段的权重Wi为:Wi=W0+(n-i+1)t,其中,n为所述集合中的崩溃片段的数目,t为权重增量并且0<t<W0。
5.根据权利要求1所述的装置,其中,所述重复崩溃确定单元进一步包括:
第四确定单元,用于确定所述新崩溃的崩溃类型信息和崩溃点信息;以及
第五确定单元,用于根据所述新崩溃的崩溃类型信息、崩溃点信息和所述哈希签名确定所述新崩溃是否为已知崩溃中的一个的重复。
6.根据权利要求5所述的装置,其中,根据所述已知崩溃的崩溃类型信息将所述已知崩溃划分为一个或多个组,根据所述已知崩溃的崩溃点信息将每个组划分为一个或多个子组,并且每个子组包括一个或多个代表性路径;并且,
其中,所述第五确定单元进一步包括:
第一判断单元,用于根据所述新崩溃的崩溃类型信息确定是否存在与所述新崩溃对应的组,并且当存在与所述新崩溃对应的组时用于根据所述新崩溃的崩溃点信息确定是否存在与所述新崩溃对应的子组;以及
第一处理单元,用于当存在与所述新崩溃对应的子组时,确定所述子组中的每个代表性路径的哈希签名;比较所述新崩溃的哈希签名与所述子组中的每个代表性路径的哈希签名;以及根据比较结果确定所述新崩溃是否为已知崩溃中的一个的重复。
7.根据权利要求6所述的装置,其中,当不存在与所述新崩溃对应的组时,或者当不存在与所述新崩溃对应的子组时,所述第一处理单元进一步确定所述新崩溃不是已知崩溃中的一个的重复。
8.根据权利要求3所述的装置,其中,所述崩溃路径信息确定单元进一步包括:
预处理单元,用于对所述与所述崩溃路径信息相关联的代码中的每行代码进行预处理;以及
合并单元,用于合并预处理后的与所述崩溃路径信息相关联代码以确定所述崩溃路径信息。
9.根据权利要求8所述的装置,其中,所述预处理单元进一步包括:
第二判断单元,用于判断代码是与系统相关的代码还是与应用程序相关的代码;以及
第二处理单元,用于当所述代码是与系统相关的代码时,对所述代码进行去重处理、删除所述代码中的所述新崩溃的出错行数以及删除所述代码中的匿名类中的数字,并且当所述代码是与应用程序相关的代码时对所述代码进行去重处理。
10.一种用于对应用程序的重复崩溃进行检测的方法,包括:
确定新崩溃的崩溃路径信息;
对所述崩溃路径信息进行分割,以获取一个或多个崩溃片段;
确定所述一个或多个崩溃片段中的每个崩溃片段的哈希码和权重;
根据所述一个或多个崩溃片段中的每个崩溃片段的哈希码和权重确定所述新崩溃的哈希签名;以及
根据所述哈希签名确定所述新崩溃是否为已知崩溃中的一个的重复。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610250990.3A CN107305522A (zh) | 2016-04-21 | 2016-04-21 | 用于对应用程序的重复崩溃进行检测的装置和方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610250990.3A CN107305522A (zh) | 2016-04-21 | 2016-04-21 | 用于对应用程序的重复崩溃进行检测的装置和方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN107305522A true CN107305522A (zh) | 2017-10-31 |
Family
ID=60151527
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610250990.3A Pending CN107305522A (zh) | 2016-04-21 | 2016-04-21 | 用于对应用程序的重复崩溃进行检测的装置和方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107305522A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108595333A (zh) * | 2018-04-26 | 2018-09-28 | Oppo广东移动通信有限公司 | PaaS平台中应用进程的健康检查方法及装置 |
CN110489345A (zh) * | 2019-08-08 | 2019-11-22 | 北京字节跳动网络技术有限公司 | 一种崩溃聚合方法、装置、介质和设备 |
CN110765007A (zh) * | 2019-09-29 | 2020-02-07 | 南京大学 | 一种面向安卓应用的崩溃信息线上分析方法 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103678109A (zh) * | 2012-09-25 | 2014-03-26 | 腾讯科技(深圳)有限公司 | 一种转储文件分析方法、装置和系统 |
CN104063318A (zh) * | 2014-06-24 | 2014-09-24 | 湘潭大学 | Android应用相似性快速检测方法 |
CN104123493A (zh) * | 2014-07-31 | 2014-10-29 | 百度在线网络技术(北京)有限公司 | 应用程序的安全性检测方法和装置 |
CN104199749A (zh) * | 2014-09-17 | 2014-12-10 | 百度在线网络技术(北京)有限公司 | 一种崩溃信息的处理方法及装置 |
CN104346267A (zh) * | 2013-08-08 | 2015-02-11 | 腾讯科技(深圳)有限公司 | 生成程序缺陷定位信息的方法及装置 |
CN104978212A (zh) * | 2014-05-16 | 2015-10-14 | 腾讯科技(深圳)有限公司 | 一种未知crash上报方法和装置 |
CN103164322B (zh) * | 2013-04-15 | 2016-02-17 | 腾讯科技(深圳)有限公司 | 一种程序崩溃的签名方法和装置 |
CN106873964A (zh) * | 2016-12-23 | 2017-06-20 | 浙江工业大学 | 一种改进的SimHash代码相似度检测方法 |
-
2016
- 2016-04-21 CN CN201610250990.3A patent/CN107305522A/zh active Pending
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103678109A (zh) * | 2012-09-25 | 2014-03-26 | 腾讯科技(深圳)有限公司 | 一种转储文件分析方法、装置和系统 |
CN103164322B (zh) * | 2013-04-15 | 2016-02-17 | 腾讯科技(深圳)有限公司 | 一种程序崩溃的签名方法和装置 |
CN104346267A (zh) * | 2013-08-08 | 2015-02-11 | 腾讯科技(深圳)有限公司 | 生成程序缺陷定位信息的方法及装置 |
CN104978212A (zh) * | 2014-05-16 | 2015-10-14 | 腾讯科技(深圳)有限公司 | 一种未知crash上报方法和装置 |
CN104063318A (zh) * | 2014-06-24 | 2014-09-24 | 湘潭大学 | Android应用相似性快速检测方法 |
CN104123493A (zh) * | 2014-07-31 | 2014-10-29 | 百度在线网络技术(北京)有限公司 | 应用程序的安全性检测方法和装置 |
CN104199749A (zh) * | 2014-09-17 | 2014-12-10 | 百度在线网络技术(北京)有限公司 | 一种崩溃信息的处理方法及装置 |
CN106873964A (zh) * | 2016-12-23 | 2017-06-20 | 浙江工业大学 | 一种改进的SimHash代码相似度检测方法 |
Non-Patent Citations (2)
Title |
---|
JIANFEIHIT: "浅谈Java中的Hash值", 《浅谈JAVA中的HASH值》 * |
LANSEKUANGTU: "手动解析CrashLog之——原理篇", 《手动解析CRASHLOG之——原理篇》 * |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108595333A (zh) * | 2018-04-26 | 2018-09-28 | Oppo广东移动通信有限公司 | PaaS平台中应用进程的健康检查方法及装置 |
CN108595333B (zh) * | 2018-04-26 | 2021-08-03 | Oppo广东移动通信有限公司 | PaaS平台中应用进程的健康检查方法及装置 |
CN110489345A (zh) * | 2019-08-08 | 2019-11-22 | 北京字节跳动网络技术有限公司 | 一种崩溃聚合方法、装置、介质和设备 |
CN110489345B (zh) * | 2019-08-08 | 2023-08-25 | 北京字节跳动网络技术有限公司 | 一种崩溃聚合方法、装置、介质和设备 |
CN110765007A (zh) * | 2019-09-29 | 2020-02-07 | 南京大学 | 一种面向安卓应用的崩溃信息线上分析方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107807982B (zh) | 一种异构数据库的一致性校验方法及装置 | |
CN107451175A (zh) | 一种基于区块链的数据处理方法及设备 | |
CN110276023B (zh) | Poi变迁事件发现方法、装置、计算设备和介质 | |
US9256583B2 (en) | Conversion of a presentation to Darwin Information Typing Architecture (DITA) | |
CN110569335B (zh) | 基于人工智能的三元组校验方法、装置及存储介质 | |
CN105808609A (zh) | 一种信息点数据冗余的判别方法和设备 | |
CN108090043A (zh) | 基于人工智能的纠错举报处理方法、装置及可读介质 | |
WO2015021879A1 (zh) | 一种数据正则表达式的挖掘方法及装置 | |
JPWO2011001806A1 (ja) | グラフの類似度計算システム、方法及びプログラム | |
CN110019649A (zh) | 一种建立、搜索索引树的方法及装置 | |
CN112732567B (zh) | 基于ip的mock数据测试方法、装置、电子设备及存储介质 | |
CN107305522A (zh) | 用于对应用程序的重复崩溃进行检测的装置和方法 | |
CN109388551A (zh) | 预测代码存在漏洞概率的方法、漏洞检测方法、相关装置 | |
CN110134768A (zh) | 文本的处理方法、装置、设备及存储介质 | |
CN115048254B (zh) | 数据分配策略的仿真测试方法、系统、设备和可读介质 | |
CN112925914A (zh) | 数据安全分级方法、系统、设备及存储介质 | |
CN116150092A (zh) | 电子档案文件快速校验方法、系统、设备及介质 | |
CN104537012B (zh) | 数据处理方法和装置 | |
CN115358397A (zh) | 一种基于数据采样的并行图规则挖掘方法及装置 | |
CN114726823A (zh) | 一种基于生成对抗网络的域名生成方法、装置和设备 | |
US20090282071A1 (en) | System and method for building a datastore for storing and retrieving regression testing data for a complex application | |
CN106156076A (zh) | 数据处理的方法和系统 | |
EP4227850A1 (en) | Program, learning method, and information processing apparatus | |
CN113393288B (zh) | 订单处理信息生成方法、装置、设备和计算机可读介质 | |
CN110472416A (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 | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20171031 |
|
WD01 | Invention patent application deemed withdrawn after publication |