CN110389888A - 程序检测方法和*** - Google Patents

程序检测方法和*** Download PDF

Info

Publication number
CN110389888A
CN110389888A CN201810356737.5A CN201810356737A CN110389888A CN 110389888 A CN110389888 A CN 110389888A CN 201810356737 A CN201810356737 A CN 201810356737A CN 110389888 A CN110389888 A CN 110389888A
Authority
CN
China
Prior art keywords
program
detected
function
state data
running state
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
CN201810356737.5A
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.)
Beijing Jingdong Century Trading Co Ltd
Beijing Jingdong Shangke Information Technology Co Ltd
Original Assignee
Beijing Jingdong Century Trading Co Ltd
Beijing Jingdong Shangke Information Technology 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 Beijing Jingdong Century Trading Co Ltd, Beijing Jingdong Shangke Information Technology Co Ltd filed Critical Beijing Jingdong Century Trading Co Ltd
Priority to CN201810356737.5A priority Critical patent/CN110389888A/zh
Publication of CN110389888A publication Critical patent/CN110389888A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本公开提供了一种程序检测方法,包括:运行特定程序,其中,所述特定程序中包括检测程序以及被检测程序;以及在运行所述特定程序的过程中,自动通过检测程序获取所述被检测程序的运行状态数据。

Description

程序检测方法和***
技术领域
本公开涉及计算机技术领域,更具体地,涉及一种程序检测方法和一种程序检测***。
背景技术
随着计算机和互联网技术的快速发展,通过计算机程序实现的功能广泛地应用于各个领域中。例如通过计算机开发的多种应用程序能够满足用户的工作和娱乐。但是,在程序运行过程中通常存在程序运行异常(例如执行缓慢)的情况,因此如何方便并快速地得到程序的运行状态数据,并通过该运行状态数据分析程序运行异常的原因成为亟待解决的问题。
在实现本公开构思的过程中,发明人发现现有技术中至少存在如下问题,现有的获取关于程序的运行状态数据通常需要人为参与,且较为繁琐,不够便捷,耗费人工成本。
发明内容
有鉴于此,本公开提供了一种优化的程序检测方法和一种程序检测***。
本公开的一个方面提供了一种程序检测方法,包括:运行特定程序,其中,所述特定程序中包括检测程序以及被检测程序,以及在运行所述特定程序的过程中,自动通过检测程序获取所述被检测程序的运行状态数据。
根据本公开的实施例,上述方法还包括:通过注解数据获取待编译检测程序,将所述待编译检测程序编译到所述特定程序中,使得所述特定程序包括所述检测程序。
根据本公开的实施例,上述待编译检测程序包括多个待编译程序片段,所述将所述待编译检测程序编译到所述特定程序中,包括:根据所述注解数据,将所述多个待编译程序片段分别编译到所述特定程序的特定位置。
根据本公开的实施例,上述运行特定程序包括通过注解数据调用所述检测程序。
根据本公开的实施例,上述运行特定程序包括通过第一线程运行所述特定程序,所述通过检测程序获取所述被检测程序的运行状态数据包括:通过所述检测程序启用第二线程获取所述被检测程序的运行状态数据。
根据本公开的实施例,上述检测程序包括第一程序片段和第二程序片段,其中,所述第一程序片段用于启用所述第二线程,所述第二程序片段用于关闭所述第二线程,所述第一程序片段在所述被检测程序运行之前运行,所述第二程序片段在所述被检测程序运行之后运行。
根据本公开的实施例,上述在运行所述特定程序的过程中,自动通过检测程序获取所述被检测程序的运行状态数据,包括:在运行所述特定程序的过程中,自动通过检测程序获取被检测程序在运行过程中的堆栈信息,基于所述堆栈信息,确定所述被检测程序的运行状态数据。
根据本公开的实施例,上述被检测程序的运行状态数据包括所述被检测程序的运行时间数据,所述通过检测程序获取被检测程序在运行过程中的堆栈信息,包括:每隔预设时间间隔,获取所述被检测程序在运行过程中的堆栈信息,得到至少一个堆栈信息,所述基于所述堆栈信息,确定所述被检测程序的运行状态数据,包括:基于所述至少一个堆栈信息以及所述预设时间间隔,确定所述被检测程序的运行时间数据。
根据本公开的实施例,上述方法还包括:根据所述堆栈信息,判断所述被检测程序的运行状态数据是否满足第一预设条件。
根据本公开的实施例,上述被检测程序包括多个函数,所述方法还包括:在所述被检测程序的运行状态数据不满足第一预设条件的情况下,获取所述多个函数中的每个函数对应的堆栈信息,根据所述每个函数对应的堆栈信息,判断所述多个函数的运行状态数据是否满足第二预设条件。
根据本公开的实施例,上述方法还包括:在所述多个函数中的第一函数的运行状态数据不满足第二预设条件的情况下,确定所述第一函数是否包含多个在运行过程中不相邻的函数片段,在所述第一函数包含多个在运行过程中不相邻的函数片段的情况下,获取多个函数片段的每个函数片段对应的堆栈信息,根据所述每个函数片段对应的堆栈信息,判断所述多个函数片段的运行状态数据是否满足第三预设条件。
根据本公开的实施例,上述方法还包括:响应于运行状态数据不满足预设条件,生成反馈数据,其中,所述运行状态数据不满足预设条件包括所述被检测程序的运行状态数据不满足所述第一预设条件,或者所述多个函数的运行状态数据不满足所述第二预设条件,或者所述多个函数片段的运行状态数据不满足所述第三预设条件。
本公开的另一个方面提供了一种程序检测***,包括运行模块和第一获取模块。运行模块运行特定程序,其中,所述特定程序中包括检测程序以及被检测程序,第一获取模块在运行所述特定程序的过程中,自动通过检测程序获取所述被检测程序的运行状态数据。
根据本公开的实施例,上述***还包括第二获取模块和编译模块。其中,第二获取模块通过注解数据获取待编译检测程序,编译模块将所述待编译检测程序编译到所述特定程序中,使得所述特定程序包括所述检测程序。
根据本公开的实施例,上述待编译检测程序包括多个待编译程序片段,所述将所述待编译检测程序编译到所述特定程序中,包括:根据所述注解数据,将所述多个待编译程序片段分别编译到所述特定程序的特定位置。
根据本公开的实施例,上述运行特定程序包括通过注解数据调用所述检测程序。
根据本公开的实施例,上述运行特定程序包括通过第一线程运行所述特定程序,所述通过检测程序获取所述被检测程序的运行状态数据包括:通过所述检测程序启用第二线程获取所述被检测程序的运行状态数据。
根据本公开的实施例,上述检测程序包括第一程序片段和第二程序片段,其中,所述第一程序片段用于启用所述第二线程,所述第二程序片段用于关闭所述第二线程,所述第一程序片段在所述被检测程序运行之前运行,所述第二程序片段在所述被检测程序运行之后运行。
根据本公开的实施例,上述第一获取模块包括第一获取子模块和确定子模块。其中,第一获取子模块在运行所述特定程序的过程中,自动通过检测程序获取被检测程序在运行过程中的堆栈信息,确定子模块基于所述堆栈信息,确定所述被检测程序的运行状态数据。
根据本公开的实施例,上述被检测程序的运行状态数据包括所述被检测程序的运行时间数据,所述通过检测程序获取被检测程序在运行过程中的堆栈信息,包括:每隔预设时间间隔,获取所述被检测程序在运行过程中的堆栈信息,得到至少一个堆栈信息,所述基于所述堆栈信息,确定所述被检测程序的运行状态数据,包括:基于所述至少一个堆栈信息以及所述预设时间间隔,确定所述被检测程序的运行时间数据。
根据本公开的实施例,上述***还包括第一判断模块。所述第一判断模块根据所述堆栈信息,判断所述被检测程序的运行状态数据是否满足第一预设条件。
根据本公开的实施例,上述被检测程序包括多个函数,所述***还包括第三获取模块和第二判断模块。第三获取模块在所述被检测程序的运行状态数据不满足第一预设条件的情况下,获取所述多个函数中的每个函数对应的堆栈信息,第二判断模块根据所述每个函数对应的堆栈信息,判断所述多个函数的运行状态数据是否满足第二预设条件。
根据本公开的实施例,上述***还包括确定模块、第四获取模块以及第三判断模块。其中,确定模块在所述多个函数中的第一函数的运行状态数据不满足第二预设条件的情况下,确定所述第一函数是否包含多个在运行过程中不相邻的函数片段,第四获取模块在所述第一函数包含多个在运行过程中不相邻的函数片段的情况下,获取多个函数片段的每个函数片段对应的堆栈信息,第三判断模块根据所述每个函数片段对应的堆栈信息,判断所述多个函数片段的运行状态数据是否满足第三预设条件。
根据本公开的实施例,上述***还包括生成模块。所述生成模块响应于运行状态数据不满足预设条件,生成反馈数据,其中,所述运行状态数据不满足预设条件包括所述被检测程序的运行状态数据不满足所述第一预设条件,或者所述多个函数的运行状态数据不满足所述第二预设条件,或者所述多个函数片段的运行状态数据不满足所述第三预设条件。
本公开的另一方面提供了一种非易失性存储介质,存储有计算机可执行指令,所述指令在被执行时用于实现如上所述的方法。
本公开的另一方面提供了一种计算机程序,所述计算机程序包括计算机可执行指令,所述指令在被执行时用于实现如上所述的方法。
根据本公开的实施例,可以至少部分地解决现有的获取关于程序的运行状态数据通常需要人为参与,且较为繁琐,不够便捷,耗费人工成本问题,并因此可以实现获取关于程序的运行状态数据的过程更为方便、节约人力的技术效果。
附图说明
通过以下参照附图对本公开实施例的描述,本公开的上述以及其他目的、特征和优点将更为清楚,在附图中:
图1示意性示出了根据本公开实施例的程序检测方法和***的应用场景;
图2A~图2B示意性示出了根据本公开实施例的程序检测方法的流程图;
图3示意性示出了根据本公开另一实施例的程序检测方法的流程图;
图4A~图4B示意性示出了根据本公开实施例的程序检测***的框图;
图5示意性示出了根据本公开另一实施例的程序检测***的框图;以及
图6示意性示出了根据本公开实施例的适于实现程序检测的计算机***的方框图。
具体实施方式
以下,将参照附图来描述本公开的实施例。但是应该理解,这些描述只是示例性的,而并非要限制本公开的范围。在下面的详细描述中,为便于解释,阐述了许多具体的细节以提供对本公开实施例的全面理解。然而,明显地,一个或多个实施例在没有这些具体细节的情况下也可以被实施。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本公开的概念。
在此使用的术语仅仅是为了描述具体实施例,而并非意在限制本公开。在此使用的术语“包括”、“包含”等表明了所述特征、步骤、操作和/或部件的存在,但是并不排除存在或添加一个或多个其他特征、步骤、操作或部件。
在此使用的所有术语(包括技术和科学术语)具有本领域技术人员通常所理解的含义,除非另外定义。应注意,这里使用的术语应解释为具有与本说明书的上下文相一致的含义,而不应以理想化或过于刻板的方式来解释。
在使用类似于“A、B和C等中至少一个”这样的表述的情况下,一般来说应该按照本领域技术人员通常理解该表述的含义来予以解释(例如,“具有A、B和C中至少一个的***”应包括但不限于单独具有A、单独具有B、单独具有C、具有A和B、具有A和C、具有B和C、和/或具有A、B、C的***等)。在使用类似于“A、B或C等中至少一个”这样的表述的情况下,一般来说应该按照本领域技术人员通常理解该表述的含义来予以解释(例如,“具有A、B或C中至少一个的***”应包括但不限于单独具有A、单独具有B、单独具有C、具有A和B、具有A和C、具有B和C、和/或具有A、B、C的***等)。本领域技术人员还应理解,实质上任意表示两个或更多可选项目的转折连词和/或短语,无论是在说明书、权利要求书还是附图中,都应被理解为给出了包括这些项目之一、这些项目任一方、或两个项目的可能性。例如,短语“A或B”应当被理解为包括“A”或“B”、或“A和B”的可能性。
本公开的实施例提供了一种程序检测方法,该方法包括:运行特定程序,其中,特定程序中包括检测程序以及被检测程序,以及在运行特定程序的过程中,自动通过检测程序获取被检测程序的运行状态数据。
图1示意性示出了根据本公开实施例的程序检测方法和***的应用场景。
如图1所示,该应用场景100例如可以包括被检测程序110以及检测程序120。
根据本公开实施例,被检测程序110例如可以是存储在计算机或者移动设备上的可运行程序。具体的,被检测程序110可以是通过计算机开发的应用软件的对应的程序。可以理解,被检测程序110可以是应用软件对应的程序,还可以是其他计算机程序,本公开对被检测程序的具体类型不作限制。
在本公开实施例中,被检测程序110在运行过程中,由于各种因素的影响,被检测程序110在运行过程中通常存在执行异常(例如存在卡顿等情况造成运行时间长),因此如何方便并快速地得到被检测程序110的运行状态数据,从而基于运行状态数据分析并优化被检测程序110成为程序开发过程中重要的目的。
在本公开实施例中,可以通过检测程序120检测被检测程序110的运行状态数据,根据运行状态数据分析该被检测程序110的运行情况,从而判断出被检测程序110在运行过程中出现异常的原因,以此达到针对性地优化被检测程序110的目的。
根据本公开实施例,检测程序120可以是存储在计算机或者移动设备上的可运行程序,通过检测程序120可以实现自动获取被检测程序110的运行状态数据,从而达到获取数据的过程更方便、节约人力的效果。
下面结合图1的应用场景,参考图2A~图3来描述根据本公开示例性实施方式的程序检测方法。需要注意的是,上述应用场景仅是为了便于理解本发明的精神和原理而示出,本发明的实施方式在此方面不受任何限制。相反,本发明的实施方式可以应用于适用的任何场景。
图2A~图2B示意性示出了根据本公开实施例的程序检测方法的流程图。
如图2A所示,该方法包括操作S210~S220。
在操作S210,运行特定程序,其中,特定程序中包括检测程序以及被检测程序。
在本公开实施例中,特定程序例如可以是存储在计算机上的可执行程序。例如,特定程序可以是一段程序,更具体地,该一段程序例如可以包括一个函数或者多个函数等。例如,特定程序可以包括检测程序和被检测程序。
其中,被检测程序可以是开发的应用软件对应的程序(或者该程序的部分程序),运行被检测程序例如包括运行该应用软件对应的程序,从而实现该应用软件的使用。可以理解,本公开实施例对被检测程序的具体类型不作限制,可以是应用软件对应的程序,还可以是其他可执行的程序。
在本公开实施例中,检测程序可以不同于被检测程序可,检测程序例如可以用来检测被检测程序的运行状态。
在操作S220,在运行特定程序的过程中,自动通过检测程序获取被检测程序的运行状态数据。
根据本公开实施例,检测程序自动获取被检测程序的运行状态数据,例如通过运行该检测程序,通过该运行的检测程序来获取被检测程序的运行状态数据。
例如,本实施例的程序检测方法可以通过多个线程完成。特定程序的运行和获取被检测程序的运行状态数据可以由不同的线程执行。其中,多个线程例如包括两个线程,即包括第一线程和第二线程。
在本公开实施例中,运行特定程序包括通过第一线程运行特定程序。
通过检测程序获取被检测程序的运行状态数据包括:通过检测程序启用第二线程获取被检测程序的运行状态数据。
在本公开实施例中,在第一线程执行特定程序的过程中,当运行到特定程序中的检测程序时,通过检测程序启用第二线程,由第二线程获取被检测程序的运行状态数据,其中,该运行状态数据例如为第一线程运行被检测程序时产生的数据,更具体的,该运行状态数据例如包括表征第一线程运行的耗时情况的数据。
根据本公开实施例,检测程序包括第一程序片段和第二程序片段,其中,第一程序片段用于启用第二线程,第二程序片段用于关闭第二线程,第一程序片段在被检测程序运行之前运行,第二程序片段在被检测程序运行之后运行。
在本公开实施例中,在运行特定程序的过程中,例如首先运行检测程序,通过检测程序开启第二线程后,再运行被检测程序,此时通过开启的第二线程获取被检测程序在运行时的运行状态数据。更具体的,检测程序例如包括第一程序片段和第二程序片段,在运行检测程序时(在被检测程序运行之前),例如首先运行第一程序片段,通过第一程序片段开启第二线程后,运行被检测程序,通过第二线程获取被检测程序的运行状态数据,当获取被检测程序的运行状态数据后(此时,被检测程序运行完成),再运行检测程序的第二程序片段,通过第二程序片段关闭第二线程。
本公开实施例通过检测程序检测被检测程序的运行状态,基于该检测程序获取被检测程序的运行状态数据,自动获取运行状态数据,实现获取被检测程序的运行状态数据的过程更为方便、节约人力的技术效果。
如图2B所示,操作S220包括操作S221~S222。
在操作S221,在运行特定程序的过程中,自动通过检测程序获取被检测程序在运行过程中的堆栈信息。
根据本公开实施例,堆栈信息例如为线程的堆栈信息。获取被检测程序在运行过程中的堆栈信息可以是获取执行该被检测程序的线程的堆栈信息。即,当该被检测程序由第一线程执行时,该堆栈信息为第一线程运行被检测程序过程中的线程堆栈。
在本公开实施例中,在运行被检测程序的过程中,自动通过检测程序开启第二线程,由第二线程获取第一线程运行被检测程序过程中的第一线程堆栈。
在本公开实施例中,获取堆栈信息可以是通过第二线程每隔预设时间间隔采集第一线程的堆栈信息,将采集到的至少一个堆栈信息保存到缓冲池中。
在操作S222,基于堆栈信息,确定被检测程序的运行状态数据。
根据本公开实施例,被检测程序由第一线程执行时,通过第二线程获取的第一线程的堆栈信息,可以确定被检测程序的运行状态数据。具体过程如下描述。
例如,被检测程序的运行状态数据包括被检测程序的运行时间数据。
通过检测程序获取被检测程序在运行过程中的堆栈信息,包括:每隔预设时间间隔,获取被检测程序在运行过程中的堆栈信息,得到至少一个堆栈信息。
具体的,第二线程例如每隔预设时间间隔a采集一次第一线程的堆栈信息,当被检测程序运行完成后,停止采集,此时,得到至少一个堆栈信息,例如至少一个堆栈信息包括第二线程采集的n个堆栈信息。
基于堆栈信息,确定被检测程序的运行状态数据,包括:基于至少一个堆栈信息以及预设时间间隔,确定被检测程序的运行时间数据。
在本公开实施例中,被检测程序的运行时间数据可以由采集到的至少一个堆栈信息以及预设时间间隔确定,例如预设时间间隔为a,至少一个堆栈信息为n个堆栈信息,此时被检测程序的运行时间例如为n*a。
图3示意性示出了根据本公开另一实施例的程序检测方法的流程图。
如图3所示,该方法包括操作S210~S220、以及S310~S390。其中,操作S210~S220与上述参考图2A描述的方法相同或类似,在此不再赘述。
在操作S310,通过注解数据获取待编译检测程序。
根据本公开实施例,注解数据可以是一种代码级别的说明,该注解数据相比程序代码较为简单直观,该注解数据例如位于待编译的被检测程序中,例如通过在待编译的被检测程序中***注解数据,可以避免直接在待编译的被检测程序中的原生代码中***其他代码(例如检测程序对应的代码),影响原生代码。通过在待编译的被检测程序中***注解数据,可以降低代码的复杂度,降低***的代码与原生代码的耦合程度,使得操作变得简单便捷。
根据本公开实施例,注解数据可以是通过AOP(Aspect Oriented Programming,切片编程)自定义的注解。其中AOP是基于切面的编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP主要实现的目的是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果。
该AOP技术可以基于在待编译被检测程序中的注解数据,在编译待编译的被检测程序的过程中,通过注解数据获取待编译检测程序。
在操作S320,将待编译检测程序编译到特定程序中,使得特定程序包括检测程序。
在编译待编译的被检测程序过程中,通过注解数据获取待编译检测程序后,可以自动将待编译检测程序编译到特定程序的相应位置,以此实现在特定程序中包括检测程序,达到在运行特定程序时自动运行检测程序,实现通过检测程序获取被检测程序的运行状态数据。
更具体地,待编译检测程序包括多个待编译程序片段。
将待编译检测程序编译到特定程序中,包括:根据注解数据,将多个待编译程序片段分别编译到特定程序的特定位置。
例如,待编译检测程序包括多个待编译程序片段,在通过注解数据获取该多个待编译程序片段后,可以自动将该多个待编译程序片段分别编译到特定程序的特定位置。
具体地,例如待编译检测程序包括第一待编译程序片段和第二待编译程序片段,例如将该第一待编译程序片段编译到特定程序的特定位置,得到检测程序的第一程序片段,将该第二待编译程序片段编译到特定程序的特定位置,得到检测程序的第二程序片段。
在本公开实施例中,获取检测程序的方法,除了上述通过注解数据获取待编译检测程序,并将待编译检测程序编译到特定程序中获取检测程序外,还包括通过注解数据直接调用检测程序,具体过程如下描述。
例如,运行特定程序包括通过注解数据调用检测程序。
具体地,通过注解数据例如可以直接调用检测程序,例如,该注解数据位于特定程序中,在运行特定程序的过程中,通过该注解数据直接调用检测程序,实现通过检测程序自动获取被检测程序的运行状态数据。
在操作S330,根据堆栈信息,判断被检测程序的运行状态数据是否满足第一预设条件。
在本公开实施例中,第一预设条件例如包括在被检测程序正常运行的情况下,该被检测程序的运行状态数据所满足的条件。
例如,运行状态数据包括运行时间数据,第一预设条件例如为具体的时间数值,更具体地,第一预设条件可以包括被检测程序的运行时间小于等于该被检测程序正常运行所需的最长运行时间,即,当被检测程序运行时间小于等于该被检测程序正常运行所需的最长运行时间时,该运行时间数据满足第一预设条件,当被检测程序运行时间大于该被检测程序正常运行所需的最长运行时间时,表征该被检测程序运行异常(耗时),即该被检测程序的运行时间数据不满足第一预设条件。
在操作S340,在被检测程序的运行状态数据不满足第一预设条件的情况下,获取多个函数中的每个函数对应的堆栈信息。其中,被检测程序包括多个函数。
在本公开实施例中,被检测程序例如包括多个函数,被检测程序的运行状态数据不满足第一预设条件,例如包括该被检测程序的运行时间大于该被检测程序正常运行所需的最长运行时间。此时,获取被检测程序中的每个函数的堆栈信息。通过每个函数的堆栈信息判断每个函数的运行状态数据。
具体地,每个函数在运行过程中的堆栈信息相同,例如,当被检测程序包括函数1和函数2时,第一线程在运行函数1的过程中,该第一线程的堆栈信息是一样的,当运行该函数1时,第二线程每隔预设时间间隔a采集一次第一线程堆栈信息,例如共采集了m个堆栈信息,此时该m个堆栈信息相同。此时函数1对应的堆栈信息例如包括m个堆栈信息。同理可得函数2对应的堆栈信息。
在操作S350,根据每个函数对应的堆栈信息,判断多个函数的运行状态数据是否满足第二预设条件。
在本公开实施例中,第二预设条件例如包括函数正常运行的情况下该函数的运行状态数据所满足的条件。
例如,运行状态数据包括运行时间数据,第二预设条件例如为具体的时间数值,更具体地,第二预设条件可以包括函数的运行时间小于等于该函数正常运行所需的最长运行时间,即,当函数运行时间小于等于该函数正常运行所需的最长运行时间时,该运行时间数据满足第二预设条件,当函数运行时间大于该函数正常运行所需的最长运行时间时,表征该函数运行异常(耗时),即该函数的运行时间数据不满足第二预设条件。
例如,函数1对应的堆栈信息为m个堆栈信息,根据每隔预设时间间隔a和堆栈信息的个数m,可以知道函数1的运行时间,从而分析该函数1的耗时情况,例如该函数1的运行时间数据包括a*m。同理可得函数2的运行时间数据。
在操作S360,在多个函数中的第一函数的运行状态数据不满足第二预设条件的情况下,确定第一函数是否包含多个在运行过程中不相邻的函数片段。
例如,多个函数包括函数1和函数2,第一函数例如为函数1。例如函数1的运行状态数据不满足第二预设条件时,具体地,例如函数1的运行时间数据a*m大于该函数1正常运行所需的最长运行时间,此时,进一步确定该函数1是否包含在运行过程中不相邻的函数片段。
在操作S370,在第一函数包含多个在运行过程中不相邻的函数片段的情况下,获取多个函数片段的每个函数片段对应的堆栈信息。
例如,函数1在运行过程中包含两个不相邻的函数片段,例如包括片段1和片段2,在被检测程序运行过程中。例如先运行函数1中的片段1,再运行函数2,之后运行函数1的片段2,此时,函数1的片段1和片段2再运行过程中不相邻,在该情况下,获取每个函数片段(片段1和片段2)对应的堆栈信息。
例如,函数1的堆栈信息包括m个堆栈信息,函数1的片段1包括m1个堆栈信息,函数1的片段2包括m2个堆栈信息,其中,m1+m2=m。
在操作S380,根据每个函数片段对应的堆栈信息,判断多个函数片段的运行状态数据是否满足第三预设条件。
在本公开实施例中,第三预设条件例如为具体的时间数值,更具体地,第三预设条件可以包括函数片段的运行时间小于等于该函数片段正常运行所需的最长运行时间。具体地,例如片段1运行时间数据a*ml大于该片段1正常运行所需的最长运行时间时,该片段1的运行时间数据不满足第三预设条件,同理可判断片段2的运行时间数据是否满足第三预设条件。
在操作S390,响应于运行状态数据不满足预设条件,生成反馈数据,其中,运行状态数据不满足预设条件包括被检测程序的运行状态数据不满足第一预设条件,或者多个函数的运行状态数据不满足第二预设条件,或者多个函数片段的运行状态数据不满足第三预设条件。
在本公开实施例中,反馈数据例如可以是堆栈信息,具体可以是第二线程获取的关于第一线程的堆栈信息,该堆栈信息反映了被检测程序、多个函数、或者多个函数片段的运行状态,例如反映了被检测程序、多个函数、或者多个函数片段的运行时间。
根据本公开实施例,例如,当被检测程序运行时间超出被检测程序正常运行所需的最长运行时间时,表示该被检测程序的运行状态数据不满足第一预设条件,此时上传反馈数据,例如上传第一线程运行被检测程序的堆栈信息,通过对该上传的反馈数据分析被检测程序运行的耗时情况。同理,可以上传多个函数中不满足第二预设条件、或者多个函数片段中不满足第三预设条件的反馈数据。
在本公开的一实施例中,在被检测程序的运行状态数据不满足第一预设条件时,例如当被检测程序对应的堆栈信息的个数较多,表征被检测程序的运行时间大于该被检测程序正常运行所需的最长运行时间,此时可以生成不满足第一预设条件的被检测程序对应的反馈数据,并且可以将反馈数据上传,以此对该上传的反馈数据分析被检测程序运行的耗时情况。其中,反馈数据例如可以是获取的全部堆栈信息或者堆栈信息中的一部分。
在本公开的又一实施例中,在被检测程序的运行状态数据不满足第一预设条件时,例如可以获取被检测程序包括的多个函数的对应的堆栈信息,通过多个函数的对应的堆栈信息判断每个函数的运行状态数据是否满足第二预设条件,当函数的运行状态数据不满足第二预设条件时,例如可以是函数对应的堆栈信息的个数较多,表征函数的运行时间大于该函数正常运行所需的最长运行时间,此时可以生成反馈数据,该反馈数据例如可以包括不满足第一预设条件的被检测程序对应的堆栈信息、或者不满足第二预设条件的函数对应的堆栈信息,并且可以将反馈数据上传,以此对该上传的反馈数据分析被检测程序或者函数运行的耗时情况。
在本公开的在一实施例中,当函数的运行状态数据是不满足第二预设条件时,可以进一步确定函数是否包含多个在运行过程中不相邻的函数片段,当函数包括多个函数片段时,通过获取多个函数片段对应的堆栈信息,通过多个函数片段对应的堆栈信息判断函数片段的运行状态数据是否满足第三预设条件,当函数片段的运行状态数据不满足第三预设条件时,例如可以是函数片段对应的堆栈信息的个数较多,表征函数片段的运行时间大于该函数片段正常运行所需的最长运行时间,此时可以生成反馈数据,该反馈数据例如可以包括不满足第一预设条件的被检测程序对应的堆栈信息、不满足第二预设条件的函数对应的堆栈信息,或者不满足第三预设条件的函数片段对应的堆栈信息,并且可以将反馈数据上传,以此对该上传的反馈数据分析被检测程序、多个函数、或者函数片段运行的耗时情况。
在本公开实施例中,反馈数据还可以是经过处理后得到的数据,例如当采集到的被检测程序、多个函数、或者多个函数片段的堆栈信息存在相邻堆栈相同时,可以表示被检测程序、多个函数、或者多个函数片段运行过程中可能存在异常(例如存在出现卡顿等情况,造成运行缓慢等),通过对该采集到的堆栈信息进行整合,例如去除重复的堆栈信息,将整合后的堆栈信息上传,以此减少内存的使用,并可以对上传的堆栈信息进行分析被检测程序、多个函数、或者多个函数片段运行过程中异常的原因。
图4A~图4B示意性示出了根据本公开实施例的程序检测***的框图。
如图4A所示,程序检测***400可以包括运行模块410、以及第一获取模块420。
运行模块410可以运行特定程序,其中,特定程序中包括检测程序以及被检测程序。根据本公开实施例,运行模块410例如可以执行上文参考图2A描述的操作S210,在此不再赘述。
第一获取模块420可以在运行特定程序的过程中,自动通过检测程序获取被检测程序的运行状态数据。
根据本公开实施例,运行特定程序包括通过第一线程运行特定程序,通过检测程序获取被检测程序的运行状态数据包括:通过检测程序启用第二线程获取被检测程序的运行状态数据。
根据本公开实施例,检测程序包括第一程序片段和第二程序片段,其中,第一程序片段用于启用第二线程,第二程序片段用于关闭第二线程,第一程序片段在被检测程序运行之前运行,第二程序片段在被检测程序运行之后运行。
根据本公开实施例,第一获取模块420例如可以执行上文参考图2A描述的操作S220,在此不再赘述。
如图4B所示,获取模块420可以包括第一获取子模块421、以及确定子模块422。
第一获取子模块421可以在运行特定程序的过程中,自动通过检测程序获取被检测程序在运行过程中的堆栈信息。
根据本公开实施例,被检测程序的运行状态数据包括被检测程序的运行时间数据,通过检测程序获取被检测程序在运行过程中的堆栈信息,包括:每隔预设时间间隔,获取被检测程序在运行过程中的堆栈信息,得到至少一个堆栈信息。
根据本公开实施例,获取子模块421例如可以执行上文参考图2B描述的操作S221,在此不再赘述。
确定子模块422可以基于堆栈信息,确定被检测程序的运行状态数据。
根据本公开实施例,基于堆栈信息,确定被检测程序的运行状态数据,包括:基于至少一个堆栈信息以及预设时间间隔,确定被检测程序的运行时间数据。
根据本公开实施例,确定子模块422例如可以执行上文参考图2B描述的操作S222,在此不再赘述。
图5示意性示出了根据本公开另一实施例的程序检测***的框图。
如图5所示,程序检测***400可以包括运行模块410、第一获取模块420、第二获取模块510、编译模块520、第一判断模块530、第三获取模块540、第二判断模块550、确定模块560、第四获取模块570、第三判断模块580、以及生成模块590。其中,运行模块410以及第一获取模块420与上述参考图4A描述的模块相同或类似,在此不再赘述。
第二获取模块510可以通过注解数据获取待编译检测程序。根据本公开实施例,第二获取模块510例如可以执行上文参考图3描述的操作S310,在此不再赘述。
编译模块520可以将待编译检测程序编译到特定程序中,使得特定程序包括检测程序。
根据本公开实施例,待编译检测程序包括多个待编译程序片段,将待编译检测程序编译到特定程序中,包括:根据注解数据,将多个待编译程序片段分别编译到特定程序的特定位置。
根据本公开实施例,运行特定程序包括通过注解数据调用检测程序。
根据本公开实施例,编译模块520例如可以执行上文参考图3描述的操作S320,在此不再赘述。
第一判断模块530可以根据堆栈信息,判断被检测程序的运行状态数据是否满足第一预设条件。根据本公开实施例,第一判断模块530例如可以执行上文参考图3描述的操作S330,在此不再赘述。
第三获取模块540可以在被检测程序的运行状态数据不满足第一预设条件的情况下,获取多个函数中的每个函数对应的堆栈信息。
根据本公开实施例,被检测程序包括多个函数。
根据本公开实施例,第三获取模块540例如可以执行上文参考图3描述的操作S340,在此不再赘述。
第二判断模块550可以根据每个函数对应的堆栈信息,判断多个函数的运行状态数据是否满足第二预设条件。根据本公开实施例,第二判断模块550例如可以执行上文参考图3描述的操作S350,在此不再赘述。
确定模块560可以在多个函数中的第一函数的运行状态数据不满足第二预设条件的情况下,确定第一函数是否包含多个在运行过程中不相邻的函数片段。根据本公开实施例,确定模块560例如可以执行上文参考图3描述的操作S360,在此不再赘述。
第四获取模块570可以在第一函数包含多个在运行过程中不相邻的函数片段的情况下,获取多个函数片段的每个函数片段对应的堆栈信息。根据本公开实施例,第四获取模块570例如可以执行上文参考图3描述的操作S370,在此不再赘述。
第三判断模块580可以根据每个函数片段对应的堆栈信息,判断多个函数片段的运行状态数据是否满足第三预设条件。根据本公开实施例,第三判断模块580例如可以执行上文参考图3描述的操作S380,在此不再赘述。
生成模块590可以响应于运行状态数据不满足预设条件,生成反馈数据,,其中,运行状态数据不满足预设条件包括被检测程序的运行状态数据不满足第一预设条件,或者多个函数的运行状态数据不满足第二预设条件,或者多个函数片段的运行状态数据不满足第三预设条件。根据本公开实施例,生成模块590例如可以执行上文参考图3描述的操作S390,在此不再赘述。
根据本公开的实施例的模块、子模块、单元、子单元中的任意多个、或其中任意多个的至少部分功能可以在一个模块中实现。根据本公开实施例的模块、子模块、单元、子单元中的任意一个或多个可以被拆分成多个模块来实现。根据本公开实施例的模块、子模块、单元、子单元中的任意一个或多个可以至少被部分地实现为硬件电路,例如现场可编程门阵列(FPGA)、可编程逻辑阵列(PLA)、片上***、基板上的***、封装上的***、专用集成电路(ASIC),或可以通过对电路进行集成或封装的任何其他的合理方式的硬件或固件来实现,或以软件、硬件以及固件三种实现方式中任意一种或以其中任意几种的适当组合来实现。或者,根据本公开实施例的模块、子模块、单元、子单元中的一个或多个可以至少被部分地实现为计算机程序模块,当该计算机程序模块被运行时,可以执行相应的功能。
例如,运行模块410、第一获取模块420、第二获取模块510、编译模块520、第一判断模块530、第三获取模块540、第二判断模块550、确定模块560、第四获取模块570、第三判断模块580、以及生成模块590中的任意多个可以合并在一个模块中实现,或者其中的任意一个模块可以被拆分成多个模块。或者,这些模块中的一个或多个模块的至少部分功能可以与其他模块的至少部分功能相结合,并在一个模块中实现。根据本公开的实施例,运行模块410、第一获取模块420、第二获取模块510、编译模块520、第一判断模块530、第三获取模块540、第二判断模块550、确定模块560、第四获取模块570、第三判断模块580、以及生成模块590中的至少一个可以至少被部分地实现为硬件电路,例如现场可编程门阵列(FPGA)、可编程逻辑阵列(PLA)、片上***、基板上的***、封装上的***、专用集成电路(ASIC),或可以通过对电路进行集成或封装的任何其他的合理方式等硬件或固件来实现,或以软件、硬件以及固件三种实现方式中任意一种或以其中任意几种的适当组合来实现。或者,运行模块410、第一获取模块420、第二获取模块510、编译模块520、第一判断模块530、第三获取模块540、第二判断模块550、确定模块560、第四获取模块570、第三判断模块580、以及生成模块590中的至少一个可以至少被部分地实现为计算机程序模块,当该计算机程序模块被运行时,可以执行相应模块的功能。
图6示意性示出了根据本公开实施例的适于实现程序检测的计算机***的方框图。图6示出的计算机***仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。
如图6所示,根据本公开实施例的计算机***600包括处理器601,其可以根据存储在只读存储器(ROM)602中的程序或者从存储部分608加载到随机访问存储器(RAM)603中的程序而执行各种适当的动作和处理。处理器601例如可以包括通用微处理器(例如CPU)、指令集处理器和/或相关芯片组和/或专用微处理器(例如,专用集成电路(ASIC)),等等。处理器601还可以包括用于缓存用途的板载存储器。处理器601可以包括用于执行根据本公开实施例的方法流程的不同动作的单一处理单元或者是多个处理单元。
在RAM 603中,存储有***600操作所需的各种程序和数据。处理器601、ROM 602以及RAM 603通过总线604彼此相连。处理器601通过执行ROM 602和/或RAM 603中的程序来执行根据本公开实施例的方法流程的各种操作。需要注意,所述程序也可以存储在除ROM 602和RAM 603以外的一个或多个存储器中。处理器601也可以通过执行存储在所述一个或多个存储器中的程序来执行根据本公开实施例的方法流程的各种操作。
根据本公开的实施例,***600还可以包括输入/输出(I/O)接口605,输入/输出(I/O)接口605也连接至总线604。***600还可以包括连接至I/O接口605的以下部件中的一项或多项:包括键盘、鼠标等的输入部分606;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分607;包括硬盘等的存储部分608;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分609。通信部分609经由诸如因特网的网络执行通信处理。驱动器610也根据需要连接至I/O接口605。可拆卸介质611,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器610上,以便于从其上读出的计算机程序根据需要被安装入存储部分608。
根据本公开的实施例,根据本公开实施例的方法流程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分609从网络上被下载和安装,和/或从可拆卸介质611被安装。在该计算机程序被处理器601执行时,执行本公开实施例的***中限定的上述功能。根据本公开的实施例,上文描述的***、设备、装置、模块、单元等可以通过计算机程序模块来实现。
本公开还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的设备/装置/***中所包含的;也可以是单独存在,而未装配入该设备/装置/***中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被执行时,实现:
一种程序检测方法,包括:运行特定程序,其中,特定程序中包括检测程序以及被检测程序,以及在运行特定程序的过程中,自动通过检测程序获取被检测程序的运行状态数据。
根据本公开的实施例,上述方法还包括:通过注解数据获取待编译检测程序,将待编译检测程序编译到特定程序中,使得特定程序包括检测程序。
根据本公开的实施例,上述待编译检测程序包括多个待编译程序片段,将待编译检测程序编译到特定程序中,包括:根据注解数据,将多个待编译程序片段分别编译到特定程序的特定位置。
根据本公开的实施例,上述运行特定程序包括通过注解数据调用检测程序。
根据本公开的实施例,上述运行特定程序包括通过第一线程运行特定程序,通过检测程序获取被检测程序的运行状态数据包括:通过检测程序启用第二线程获取被检测程序的运行状态数据。
根据本公开的实施例,上述检测程序包括第一程序片段和第二程序片段,其中,第一程序片段用于启用第二线程,第二程序片段用于关闭第二线程,第一程序片段在被检测程序运行之前运行,第二程序片段在被检测程序运行之后运行。
根据本公开的实施例,上述在运行特定程序的过程中,自动通过检测程序获取被检测程序的运行状态数据,包括:在运行特定程序的过程中,自动通过检测程序获取被检测程序在运行过程中的堆栈信息,基于堆栈信息,确定被检测程序的运行状态数据。
根据本公开的实施例,上述被检测程序的运行状态数据包括被检测程序的运行时间数据,通过检测程序获取被检测程序在运行过程中的堆栈信息,包括:每隔预设时间间隔,获取被检测程序在运行过程中的堆栈信息,得到至少一个堆栈信息,基于堆栈信息,确定被检测程序的运行状态数据,包括:基于至少一个堆栈信息以及预设时间间隔,确定被检测程序的运行时间数据。
根据本公开的实施例,上述方法还包括:根据堆栈信息,判断被检测程序的运行状态数据是否满足第一预设条件。
根据本公开的实施例,上述被检测程序包括多个函数,方法还包括:在被检测程序的运行状态数据不满足第一预设条件的情况下,获取多个函数中的每个函数对应的堆栈信息,根据每个函数对应的堆栈信息,判断多个函数的运行状态数据是否满足第二预设条件。
根据本公开的实施例,上述方法还包括:在多个函数中的第一函数的运行状态数据不满足第二预设条件的情况下,确定第一函数是否包含多个在运行过程中不相邻的函数片段,在第一函数包含多个在运行过程中不相邻的函数片段的情况下,获取多个函数片段的每个函数片段对应的堆栈信息,根据每个函数片段对应的堆栈信息,判断多个函数片段的运行状态数据是否满足第三预设条件。
根据本公开的实施例,上述方法还包括:响应于运行状态数据不满足预设条件,生成反馈数据,其中,运行状态数据不满足预设条件包括被检测程序的运行状态数据不满足第一预设条件,或者多个函数的运行状态数据不满足第二预设条件,或者多个函数片段的运行状态数据不满足第三预设条件。
根据本公开的实施例,计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的***、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行***、装置或者器件使用或者与其结合使用。而在本公开中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行***、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、有线、光缆、射频信号等等,或者上述的任意合适的组合。根据本公开的实施例,计算机可读介质可以包括上文描述的ROM602和/或RAM 603和/或ROM 602和RAM 603以外的一个或多个存储器。
附图中的流程图和框图,图示了按照本公开各种实施例的***、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的***来实现,或者可以用专用硬件与计算机指令的组合来实现。
本领域技术人员可以理解,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合或/或结合,即使这样的组合或结合没有明确记载于本公开中。特别地,在不脱离本公开精神和教导的情况下,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合和/或结合。所有这些组合和/或结合均落入本公开的范围。
以上对本公开的实施例进行了描述。但是,这些实施例仅仅是为了说明的目的,而并非为了限制本公开的范围。尽管在以上分别描述了各实施例,但是这并不意味着各个实施例中的措施不能有利地结合使用。本公开的范围由所附权利要求及其等同物限定。不脱离本公开的范围,本领域技术人员可以做出多种替代和修改,这些替代和修改都应落在本公开的范围之内。

Claims (26)

1.一种程序检测方法,包括:
运行特定程序,其中,所述特定程序中包括检测程序以及被检测程序;以及
在运行所述特定程序的过程中,自动通过检测程序获取所述被检测程序的运行状态数据。
2.根据权利要求1所述的方法,还包括:
通过注解数据获取待编译检测程序;
将所述待编译检测程序编译到所述特定程序中,使得所述特定程序包括所述检测程序。
3.根据权利要求2所述的方法,其中:
所述待编译检测程序包括多个待编译程序片段;
所述将所述待编译检测程序编译到所述特定程序中,包括:根据所述注解数据,将所述多个待编译程序片段分别编译到所述特定程序的特定位置。
4.根据权利要求1所述的方法,其中:
运行特定程序包括通过注解数据调用所述检测程序。
5.根据权利要求1所述的方法,其中:
所述运行特定程序包括通过第一线程运行所述特定程序;
所述通过检测程序获取所述被检测程序的运行状态数据包括:通过所述检测程序启用第二线程获取所述被检测程序的运行状态数据。
6.根据权利要求5所述的方法,其中:
所述检测程序包括第一程序片段和第二程序片段,其中,所述第一程序片段用于启用所述第二线程,所述第二程序片段用于关闭所述第二线程,所述第一程序片段在所述被检测程序运行之前运行,所述第二程序片段在所述被检测程序运行之后运行。
7.根据权利要求1所述的方法,其中,所述在运行所述特定程序的过程中,自动通过检测程序获取所述被检测程序的运行状态数据,包括:
在运行所述特定程序的过程中,自动通过检测程序获取被检测程序在运行过程中的堆栈信息;
基于所述堆栈信息,确定所述被检测程序的运行状态数据。
8.根据权利要求7所述的方法,其中:
所述被检测程序的运行状态数据包括所述被检测程序的运行时间数据;
所述通过检测程序获取被检测程序在运行过程中的堆栈信息,包括:每隔预设时间间隔,获取所述被检测程序在运行过程中的堆栈信息,得到至少一个堆栈信息;
所述基于所述堆栈信息,确定所述被检测程序的运行状态数据,包括:基于所述至少一个堆栈信息以及所述预设时间间隔,确定所述被检测程序的运行时间数据。
9.根据权利要求7所述的方法,还包括:
根据所述堆栈信息,判断所述被检测程序的运行状态数据是否满足第一预设条件。
10.根据权利要求9所述的方法,其中:
所述被检测程序包括多个函数;
所述方法还包括:
在所述被检测程序的运行状态数据不满足第一预设条件的情况下,获取所述多个函数中的每个函数对应的堆栈信息;
根据所述每个函数对应的堆栈信息,判断所述多个函数的运行状态数据是否满足第二预设条件。
11.根据权利要求10所述的方法,还包括:
在所述多个函数中的第一函数的运行状态数据不满足第二预设条件的情况下,确定所述第一函数是否包含多个在运行过程中不相邻的函数片段;
在所述第一函数包含多个在运行过程中不相邻的函数片段的情况下,获取多个函数片段的每个函数片段对应的堆栈信息;
根据所述每个函数片段对应的堆栈信息,判断所述多个函数片段的运行状态数据是否满足第三预设条件。
12.根据权利要求9~11中任一项所述的方法,还包括:
响应于运行状态数据不满足预设条件,生成反馈数据,其中,所述运行状态数据不满足预设条件包括所述被检测程序的运行状态数据不满足所述第一预设条件,或者所述多个函数的运行状态数据不满足所述第二预设条件,或者所述多个函数片段的运行状态数据不满足所述第三预设条件。
13.一种程序检测***,包括:
运行模块,运行特定程序,其中,所述特定程序中包括检测程序以及被检测程序;以及
第一获取模块,在运行所述特定程序的过程中,自动通过检测程序获取所述被检测程序的运行状态数据。
14.根据权利要求13所述的***,还包括:
第二获取模块,通过注解数据获取待编译检测程序;
编译模块,将所述待编译检测程序编译到所述特定程序中,使得所述特定程序包括所述检测程序。
15.根据权利要求14所述的***,其中:
所述待编译检测程序包括多个待编译程序片段;
所述将所述待编译检测程序编译到所述特定程序中,包括:根据所述注解数据,将所述多个待编译程序片段分别编译到所述特定程序的特定位置。
16.根据权利要求13所述的***,其中:
运行特定程序包括通过注解数据调用所述检测程序。
17.根据权利要求13所述的***,其中:
所述运行特定程序包括通过第一线程运行所述特定程序;
所述通过检测程序获取所述被检测程序的运行状态数据包括:通过所述检测程序启用第二线程获取所述被检测程序的运行状态数据。
18.根据权利要求17所述的***,其中:
所述检测程序包括第一程序片段和第二程序片段,其中,所述第一程序片段用于启用所述第二线程,所述第二程序片段用于关闭所述第二线程,所述第一程序片段在所述被检测程序运行之前运行,所述第二程序片段在所述被检测程序运行之后运行。
19.根据权利要求13所述的***,其中,所述第一获取模块包括:
第一获取子模块,所述在运行所述特定程序的过程中,自动通过检测程序获取被检测程序在运行过程中的堆栈信息;
确定子模块,基于所述堆栈信息,确定所述被检测程序的运行状态数据。
20.根据权利要求19所述的***,其中:
所述被检测程序的运行状态数据包括所述被检测程序的运行时间数据;
所述通过检测程序获取被检测程序在运行过程中的堆栈信息,包括:每隔预设时间间隔,获取所述被检测程序在运行过程中的堆栈信息,得到至少一个堆栈信息;
所述基于所述堆栈信息,确定所述被检测程序的运行状态数据,包括:基于所述至少一个堆栈信息以及所述预设时间间隔,确定所述被检测程序的运行时间数据。
21.根据权利要求19所述的***,还包括:
第一判断模块,根据所述堆栈信息,判断所述被检测程序的运行状态数据是否满足第一预设条件。
22.根据权利要求21所述的***,其中:
所述被检测程序包括多个函数;
所述***还包括:
第三获取模块,在所述被检测程序的运行状态数据不满足第一预设条件的情况下,获取所述多个函数中的每个函数对应的堆栈信息;
第二判断模块,根据所述每个函数对应的堆栈信息,判断所述多个函数的运行状态数据是否满足第二预设条件。
23.根据权利要求22所述的***,还包括:
确定模块,在所述多个函数中的第一函数的运行状态数据不满足第二预设条件的情况下,确定所述第一函数是否包含多个在运行过程中不相邻的函数片段;
第四获取模块,在所述第一函数包含多个在运行过程中不相邻的函数片段的情况下,获取多个函数片段的每个函数片段对应的堆栈信息;
第三判断模块,根据所述每个函数片段对应的堆栈信息,判断所述多个函数片段的运行状态数据是否满足第三预设条件。
24.根据权利要求21~23中任一项所述的***,还包括:
生成模块,响应于运行状态数据不满足预设条件,生成反馈数据,,其中,所述运行状态数据不满足预设条件包括所述被检测程序的运行状态数据不满足所述第一预设条件,或者所述多个函数的运行状态数据不满足所述第二预设条件,或者所述多个函数片段的运行状态数据不满足所述第三预设条件。
25.一种程序检测***,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
其中,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器执行根据权利要求1~12中任一项所述的方法。
26.一种计算机可读介质,其上存储有可执行指令,该指令被处理器执行时使处理器执行根据权利要求1~12中任一项所述的方法。
CN201810356737.5A 2018-04-19 2018-04-19 程序检测方法和*** Pending CN110389888A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201810356737.5A CN110389888A (zh) 2018-04-19 2018-04-19 程序检测方法和***

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810356737.5A CN110389888A (zh) 2018-04-19 2018-04-19 程序检测方法和***

Publications (1)

Publication Number Publication Date
CN110389888A true CN110389888A (zh) 2019-10-29

Family

ID=68282681

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810356737.5A Pending CN110389888A (zh) 2018-04-19 2018-04-19 程序检测方法和***

Country Status (1)

Country Link
CN (1) CN110389888A (zh)

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005222361A (ja) * 2004-02-06 2005-08-18 Eiji Okamoto 不正プログラム検出機能を持つシステム、及び方法
US20060092846A1 (en) * 2004-10-01 2006-05-04 Microsoft Corporation Method and system for a system call profiler
CN103930868A (zh) * 2011-11-29 2014-07-16 华为技术有限公司 定制优化/转换/处理策略的***和方法
CN105843741A (zh) * 2016-03-24 2016-08-10 腾讯科技(深圳)有限公司 应用程序的信息处理方法和装置
CN107783844A (zh) * 2017-10-13 2018-03-09 锐捷网络股份有限公司 一种计算机程序运行异常检测方法、装置和介质

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005222361A (ja) * 2004-02-06 2005-08-18 Eiji Okamoto 不正プログラム検出機能を持つシステム、及び方法
US20060092846A1 (en) * 2004-10-01 2006-05-04 Microsoft Corporation Method and system for a system call profiler
CN103930868A (zh) * 2011-11-29 2014-07-16 华为技术有限公司 定制优化/转换/处理策略的***和方法
CN105843741A (zh) * 2016-03-24 2016-08-10 腾讯科技(深圳)有限公司 应用程序的信息处理方法和装置
CN107783844A (zh) * 2017-10-13 2018-03-09 锐捷网络股份有限公司 一种计算机程序运行异常检测方法、装置和介质

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
李建平等,: "静态检测缓冲区溢出漏洞", 《微机发展》, vol. 14, no. 6, 10 June 2004 (2004-06-10), pages 100 - 101 *
杨睿;金大海;宫云战;马跃;: "Java中空指针引用故障的静态检测方法", 清华大学学报(自然科学版), no. 1, 15 October 2011 (2011-10-15) *

Similar Documents

Publication Publication Date Title
US9323652B2 (en) Iterative bottleneck detector for executing applications
CN109992498B (zh) 测试用例的生成方法及***、计算机***
CN103793326B (zh) 组件测试方法及装置
US20150007148A1 (en) Identifying Test Cases Based on Changed Test Code
US9886384B2 (en) Cache control device for prefetching using pattern analysis processor and prefetch instruction and prefetching method using cache control device
US8140730B2 (en) System reconfiguration of expansion cards
US20160321037A1 (en) Performance verification device for verifying performance of program, method, and recording medium having program recorded thereon for causing computer to perform the method
JP6289778B2 (ja) テストケース生成装置及びテストケース生成プログラム
JP7517585B2 (ja) 解析機能付与装置、解析機能付与プログラム及び解析機能付与方法
US8875064B2 (en) Automated design rule checking (DRC) test case generation
US20080189686A1 (en) System and Method for Detecting Software Defects
US20190187966A1 (en) Dynamically replacing a call to a software library with a call to an accelerator
US20200233732A1 (en) Helping a hardware accelerator using software
US8661293B2 (en) Test architecture based on intelligent test sequence
US9442826B2 (en) Kernel functionality checker
US20140172344A1 (en) Method, system and apparatus for testing multiple identical components of multi-component integrated circuits
US20190050231A1 (en) Slave processor within a system-on-chip
CN113778849A (zh) 用于测试代码的方法、装置、设备以及存储介质
CN110389888A (zh) 程序检测方法和***
GB2580830A (en) Data verification device, data verification method, and data verification program
JP5606261B2 (ja) デバッグシステムおよびデバッグシステムのトレースデータ取得方法
US7516448B1 (en) Method for improving irreducible region commoning compile speed
US10474610B1 (en) Hardware trace and introspection for productivity platform using a system-on-chip
US10339032B2 (en) System for monitoring and reporting performance and correctness issues across design, compile and runtime
US11036693B2 (en) Apparatus of continuous profiling for multicore embedded system and method of the same

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