CN108021496A - 线程数据处理方法及装置 - Google Patents

线程数据处理方法及装置 Download PDF

Info

Publication number
CN108021496A
CN108021496A CN201610966687.3A CN201610966687A CN108021496A CN 108021496 A CN108021496 A CN 108021496A CN 201610966687 A CN201610966687 A CN 201610966687A CN 108021496 A CN108021496 A CN 108021496A
Authority
CN
China
Prior art keywords
subject thread
thread
probe response
user
message
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.)
Granted
Application number
CN201610966687.3A
Other languages
English (en)
Other versions
CN108021496B (zh
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.)
Shenzhen Yayue Technology Co ltd
Original Assignee
Tencent Technology Shenzhen 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 Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN201610966687.3A priority Critical patent/CN108021496B/zh
Priority to PCT/CN2017/101444 priority patent/WO2018076945A1/zh
Publication of CN108021496A publication Critical patent/CN108021496A/zh
Priority to US16/297,241 priority patent/US10877745B2/en
Application granted granted Critical
Publication of CN108021496B publication Critical patent/CN108021496B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/71Version control; Configuration management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3644Software debugging by instrumenting at runtime
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0706Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment
    • G06F11/0715Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment in a system implementing multitasking
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0751Error or fault detection not based on redundancy
    • G06F11/0754Error or fault detection not based on redundancy by exceeding limits
    • G06F11/0757Error or fault detection not based on redundancy by exceeding limits by exceeding a time limit, i.e. time-out, e.g. watchdogs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3624Software debugging by performing operations on the source code, e.g. via a compiler
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3636Software debugging by tracing the execution of the program
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3648Software debugging using additional hardware
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/542Event management; Broadcasting; Multicasting; Notifications
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/86Event-based monitoring

Landscapes

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

Abstract

本发明是关于一种线程数据处理方法,属于软件测试技术领域。所述方法包括:启动获取目标线程对应的探测响应,探测响应是目标线程正常运行过程中生成的响应消息,检测在启动获取探测响应之后的第一预定时间长度时间段内是否获取到该探测响应;若在第一预定时间长度时间段内未获取到探测响应,则获取所述目标线程的函数调用信息。在发现目标线程卡死现象时能够及时获取函数调用信息,提高开发人员修复问题的及时性,开发人员不需要专门打包可调试版本程序,也不需要测试人员通过可调试版本程序进行目标线程卡死现象的复现,达到提高软件测试效率和测试结果的准确性的效果。

Description

线程数据处理方法及装置
技术领域
本发明涉及软件测试技术领域,特别涉及一种线程数据处理方法及装置。
背景技术
线程卡死是软件开发与测试过程中的一种常见的问题。在修复线程卡死的问题时,开发人员为了分析线程在卡死时所调用的函数,以便对相关函数的代码进行排查,通常需要获取线程卡死时的函数调用信息。
在一个应用程序的运营过程中,当用户在使用应用程序过程中发现该应用程序中的目标线程存在卡死现象时,可以发送相应的问题报告,开发人员打包该应用程序的可调试版本程序,由测试人员在该可调试版本程序中进行卡死现象的复现,比如,测试人员在可调试版本程序中反复执行与目标线程相关的操作,直至目标线程卡死;目标线程的卡死现象复现后,再由开发人员通过调试工具导出可调试版本程序中的目标线程的函数调用信息,并根据该函数调用信息来了解目标线程卡死时的函数调用情况。
现有技术中从发现目标线程存在卡死现象到开发人员打包完成可调试版本的程序之间可能存在一段较长的时间差,问题修复的时效性较差;此外,线程卡死是一种偶然现象,通常需要测试人员进行成百上千次操作之后才能复现成功,浪费大量的测试时间,影响应用程序的测试效率;另外,可调试版本程序与正式发布版本的应用程序之间存在一定的差别,可能导致线程卡死现象的复现过程产生偏差,影响测试结果的准确性。
发明内容
为了解决现有技术中问题修复的时效性较差,需要测试人员进行成百上千多次操作之后才能复现成功,浪费大量的测试时间,且可调试版本程序与正式发布版本的应用程序之间存在一定的差别,导致线程卡死现象的复现过程产生偏差的问题,本发明实施例提供了一种线程数据处理方法及装置,技术方案如下:
第一方面,提供了一种线程数据处理方法,所述方法包括:
启动获取目标线程对应的探测响应,所述探测响应是目标线程正常运行过程中生成的响应消息;
检测在启动获取所述探测响应之后的第一预定时间长度时间段内,是否获取到所述探测响应;
若在所述第一预定时间长度时间段内未获取到所述探测响应,则获取所述目标线程的函数调用信息,所述函数调用信息是用于分析所述目标线程的卡死原因的信息。
第二方面,提供了一种线程数据处理装置,所述装置包括:
探测模块,用于启动获取目标线程对应的探测响应,所述探测响应是目标线程正常运行过程中生成的响应消息;
响应检测模块,用于检测在启动获取所述探测响应之后的第一预定时间长度时间段内,是否获取到所述探测响应;
信息获取模块,用于在所述第一预定时间长度时间段内未获取到所述探测响应时,获取所述目标线程的函数调用信息,所述函数调用信息是用于分析所述目标线程的卡死原因的信息。
本发明实施例提供的技术方案可以包括以下有益效果:
在目标线程运行的过程中,可以通过获取目标线程正常运行时生成的响应消息来检测目标线程是否卡死,并在检测出目标线程卡死时,自动获取该目标线程的函数调用信息,在发现目标线程卡死现象时能够及时获取函数调用信息,提高开发人员修复问题的及时性,并且开发人员不需要专门打包可调试版本程序,也不需要测试人员通过可调试版本程序进行目标线程卡死现象的复现,达到提高软件测试效率和测试结果的准确性的效果。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本发明。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。
图1是本发明所涉及的实施环境的示意图;
图2是根据一示例性实施例示出的线程数据处理方法的流程图;
图3是图2所示实施例涉及的一种获取目标线程的调用栈的时序图;
图4是根据一示例性实施例示出的线程数据处理方法的流程图;
图5是图4所示实施例涉及的一种监测用户操作对应的标志性事件的方法的流程图;
图6是图4所示实施例涉及的一种获取目标线程的调用栈的时序图;
图7是根据一示例性实施例示出的一种线程数据处理装置的框图;
图8是根据一示例性实施例提供的终端的结构示意图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本发明相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本发明的一些方面相一致的装置和方法的例子。
图1是本发明所涉及的实施环境的示意图。该实施环境可以包括:终端110和服务器120。
该终端110可以是具有第三方应用程序运行功能的终端,比如,终端110可以是智能手机、平板电脑或者电子书阅读器等移动终端,或者,终端110也可以是台式电脑或者笔记本电脑等。
服务器120可以是单台服务器,或者,服务器120也可以是由多台电脑组成的服务器集群,或者,服务器120也可以是一个云服务平台。
终端110与服务器120之间通过有线或无线网络连接并进行数据通信。
在本发明所示的方案中,终端110中的第三方应用程序运行时,监控组件可以自动检测第三方应用程序中的目标线程是否发生卡死,若检测出目标线程卡死,则自动获取目标线程的函数调用信息。即在正式发布的第三方应用程序运行过程中,当目标线程发送卡死时,可以及时的获取目标线程的函数调用信息,不需要开发人员再打包可调试版本的程序,也不需要测试人员对线程卡死现象进行重现,避免了线程卡死的重现过程浪费大量的测试时间,以及可调试版本程序与正式发布版本的应用程序之间存在差别而导致线程卡死现象的复现过程产生偏差的问题。
其中,本发明所示的方案中,上述监控组件可以由目标线程对应的第三方应用程序中的代码来实现,即该监控组件可以是第三方应用程序中的一个功能组件,或者,该监控组件也可以是第三方应用程序中的一个插件;或者,该监控组件也可以是独立于该第三方应用程序之外的程序组件。
图2是根据一示例性实施例示出的一种线程数据处理方法的流程图,该方法可以用于图1所示实施环境中的终端110中。如图2所示,该线程数据处理方法可以包括如下几个步骤:
步骤201,启动获取目标线程对应的探测响应,该探测响应是目标线程正常运行过程中生成的响应消息。
线程是程序运行过程中的最小调度单位,有时也被称为轻量级进程(英文:Lightweight Process,缩写:LWP)。线程在运行过程中驱动着一个消息队列,对该消息队列中的消息逐一进行处理,并且先***该消息队列的消息会先得到处理。
在第三方应用程序运行过程中,监控组件获取目标线程对应的探测响应时,可以向第三方应用程序中的目标线程发送探测消息,该探测消息用于指示目标线程在处理该探测消息时返回探测响应。
在本发明实施例中,上述探测消息具体可以是一个探针消息,上述探测响应可以是针对该探针消息的探针响应。在第三方应用程序运行过程中,监控组件可以向第三方应用程序中的目标线程发送探针消息,即相当于在目标线程的消息队列中***该探针消息,该探针消息中除了自己的标识符(用于指示该消息是一个探针消息)之外,可以不携带其它信息,目标线程在逐一处理消息队列中的消息时,若根据上述标识符确认当前处理的消息是一个探针消息,则不做其它处理,直接向该探针消息的发送方返回一个探针响应,该探针响应中也可以只包含自己的标识符(用于指示该响应是一个探针响应)。
具体的,监控组件发送探针消息和目标线程返回探针响应的代码可以如下:
1)监控组件向目标线程发送探针消息TRY_DEAD_CODE_DETECTION:
targetHandler.sendEmptyMessage(TRY_DEAD_CODE_DETECTION);
//targetHandler是目标线程的消息队列句柄,sendEmptyMessage通过该句柄向目标线程的消息队列中***消息TRY_DEAD_CODE_DETECTION。
2)目标线程接收到探针消息,若目标线程没有卡死,可以对该消息进行处理,返回探针响应DEAD_CODE_DETECTION_DONE:
或者,除了探针消息之外,上述探测消息也可以是其它类型的消息,只要该消息能够指示目标线程在处理时向监控组件返回响应即可。
可选的,上述方案以监控组件主动向目标线程发送探测消息,以触发目标线程返回探测响应为例进行说明,在实际应用中,监控组件也可以通过其它方式获取探测响应,比如,目标线程在正常运行过程中,可以定时生成,并向监控组件发送探测响应,此时,监控组件只需要被动接收该探测响应即可。
步骤202,检测在启动获取探测响应之后的第一预定时间长度时间段内,是否获取到该探测响应。
以监控组件主动发送探测消息为例,监控组件向目标线程发送探测消息后,若目标线程未发生卡死,则会在处理到该探测消息时,向监控组件返回一个探测响应,相应的,如果该目标线程发生卡死,则该探测消息将会长时间得不到处理。因此,在本发明实施例中,监控组件在发送探测消息后,可以检测之后的第一预定时间长度时间段内是否接收到目标线程返回的探测响应,如果在该第一预定时间长度时间段内接收到该探测响应,则认为目标线程未发生卡死,反之,如果在该第一预定时间长度时间段内未接收到该探测响应,则认为目标线程卡死,并进行后续步骤。
步骤203,若在该第一预定时间长度时间段内未获取到该探测响应,则获取该目标线程的函数调用信息,该函数调用信息是用于分析目标线程的卡死原因的信息,比如,该函数调用信息可以用于指示该目标线程的函数调用情况。
在该第一预定时间长度时间段内,若监控组件未获取到该探测响应,则可以认为目标线程卡死,此时可以自动获取目标线程的函数调用信息,以便及时获得目标线程的函数调用情况。
其中,监控组件可以通过信号捕捉函数来获取目标线程的函数调用信息,比如,该监控组件可以通过信号捕捉函数从***层获取该目标线程的上下文信息(context),并解析该上下文信息,将该上下文信息中携带的该目标线程的调用栈解析为上述函数调用信息,该调用栈用于指示该目标线程的函数调用关系以及该函数调用关系中各个函数所在的文件和行号。
具体的,以监控组件通过sigaction函数来获取目标线程的调用栈为例,监控组件预先通过sigaction注册信号捕获函数sa_sigaction,其代码如下:
struct sigaction act;//声明变量
act.sa_sigaction=sa_sigaction;//配置信号捕捉函数为sa_sigaction
sigaction(SIGABRT,&act,NULL);//注册信号SIGABRT的捕捉函数
在上述第一预定时间长度时间段内,若监控组件未接收到探测响应,则通过pthread_kill方法向目标线程的句柄发送信号,代码如下:
pthread_kill(thread_handler,SIGABRT);//向目标线程的句柄thread_handler的信号SIGABRT,以触发信号捕捉函数
***层接收到上述信号之后,根据该目标线程的句柄获取该目标线程的上下文信息,该目标线程的上下文信息中包含该目标线程当前的调用栈,调用栈中包含用于定位代码逻辑的相关信息,比如,该调用栈中包含用于指示目标线程的函数调用关系以及该函数调用关系中各个函数所在的文件和行号。***层将获取到的该目标线程的上下文信息添加在信号捕捉函数sa_sigaction中,并将信号捕捉函数sa_sigaction返回给监控组件,监控组件解析该信号捕捉函数sa_sigaction中的上下文信息,以获取该目标线程当前的调用栈,将该调用栈作为目标线程的函数调用信息。
步骤204,将获取到的该函数调用信息上传至服务器。
监控组件获取到目标线程的调用栈之后,即可以将获取到的该调用栈上传至服务器。一方面,开发人员只需要登录服务器即可以获取目标线程发生卡死时的调用栈,并通过该调用栈所指示的,目标线程的函数调用关系以及该函数调用关系中各个函数所在的文件和行号来对可能导致目标线程卡死的代码进行排查,不再需要开发人员打包可调试版本程序并交给测试人员进行卡死复现,降低了开发人员与测试人员之间的沟通成本。另一方面,由于不同版本的程序所对应的调试工具的代码也可能不同,现有技术中通过调试工具导出目标线程的函数调用信息时,需要开发人员选择的调试工具的代码与可调试版本程序相匹配才能实现函数调用信息的成功导出,而通过本发明实施例所示的方案,不再需要通过调试工具导出可调试版本程序中的目标线程的函数调用信息,也就不需要开发人员浪费人力来设置调试工具,进一步提供测试效率。
具体的,请参考图3,其示出了本发明实施例涉及的一种获取目标线程的调用栈的时序图。在图3中,监控组件首先向目标线程发送探测消息,同时启动定时器,该定时器的定时时长为第一预定时间长度。在定时器运行过程中,若监控组件一直未接收到目标线程返回的探测响应,则在定时器运行到达定时时长时,监控组件通过sigaction函数获取目标线程的调用栈,并将获取到的调用栈上传给服务器(如图3a)。反之,若在定时器运行过程中,监控组件接收到目标线程返回的探测响应,则监控组件取消定时器,并等待下一次向目标线程发送探测消息(如图3b)。
综上所述,本发明实施例所示的方法,在目标线程运行的过程中,可以通过获取目标线程正常运行时生成的响应消息检测目标线程是否卡死,并在检测出目标线程卡死时,自动获取该目标线程的函数调用信息并上传服务器,开发人员只需要登录服务器即可以获取第三方应用程序中的目标线程卡死时的函数调用情况,在发现目标线程卡死现象时能够及时获取函数调用信息,提高开发人员修复问题的及时性,并且不需要专门打包可调试版本程序,不需要测试人员通过可调试版本程序进行目标线程卡死现象的复现,也不需要开发人员浪费人力来设置与可调试版本程序相匹配的调试工具,避免了线程卡死的重现和信息导出过程浪费大量的测试时间,以及可调试版本程序与正式发布版本的应用程序之间存在差别而导致线程卡死现象的复现过程产生偏差的问题,同时降低了开发人员与测试人员之间的沟通成本,从而达到提高软件测试效率和测试结果的准确性的效果。
在上述图2所示的实施例中,监控组件可以周期性的获取目标线程正常运行时生成的探测消息。可选的,第三方应用程序中的目标线程发生的卡死现象,通常是由于用户与第三方应用程序之间进行交互引起的,为了减小***开销,避免资源浪费,同时确保在目标线程卡死时能够及时获取目标线程的函数调用信息,本发明所提供的方案,还可以在检测到与目标线程相关的用户操作时,启动获取目标线程正常运行时生成的探测响应,而在其它时间则不获取该探测响应。具体的,本发明下面的实施例将以在检测到与目标线程相关的用户操作时向目标线程发送探测消息为例进行说明。
图4是根据一示例性实施例示出的一种线程数据处理方法的流程图,该方法可以用于图1所示实施环境中的终端110中。如图4所示,该线程数据处理方法可以包括如下几个步骤:
步骤401,在第三方应用程序运行过程中,检测在接收到由该第三方应用程序中的目标线程进行处理的用户操作之后的第二预定时间长度时间段内,是否监测到该用户操作对应的标志性事件。
在可实现用户交互的第三方应用程序中,当接收到用户在该第三方应用程序的交互界面中执行的一项操作时,若该项操作被对应的线程处理,则通常会产生相应的标志性事件,从接收到用户在第三方应用程序中执行的用户操作时开始,监控组件可以检测在之后的第二预定时间长度时间段内,是否检测到该用户操作被目标线程处理时产生的标志性事件,如果在该第二预定时间长度时间段内未监测到该标志性事件,则可以认为该目标线程可能发生了卡死现象,执行后续步骤402。反之,若监控组件在后续的第二预定时间长度时间段内监测到该标志性事件,则认为目标线程未发生卡死,则不执行后续步骤402,并等待下一次接收到用户在第三方应用程序中执行的用户操作时,重复执行上述监测标志性事件的过程。
比如,以第三方应用程序为浏览器,第三方应用程序中的目标线程为浏览器的内核线程为例,请参考图5,其示出了本发明实施例涉及的一种监测用户操作对应的标志性事件的方法的流程图,该方法可以包括如下步骤:
步骤401a,接收第一通知消息,该第一通知消息是接收到该用户操作后生成并发送的消息。
在浏览器中,每个标签页的实例可以实现为一个网络视图(WebView)控件,网络视图控件在接收到由内核线程处理的用户操作(即用户在对应的浏览器标签页上执行某个操作)后,除了通知内核线程处理该用户操作之外,还生成并向监控组件发送第一通知消息。
在本发明实施例中,浏览器中的内核线程可以是指执行浏览器的渲染引擎的代码的线程。
步骤401b,开始启动定时。
监控组件接收到第一通知消息后,确认浏览器接收到相关的用户操作,则启动一个定时时长为第二预定时间长度的定时器(记为timer A)。
步骤401c,检测在定时到达第二预定时间长度的过程中,是否接收到第二通知消息,该第二通知消息是监测到该标志性事件时生成的消息。
网络视图控件在通知目标线程处理上述用户操作后,即监测目标线程处理该用户操作时产生的标志性事件是否发生,若监测到该标志性事件发生,则生成并向监控组件发送第二通知消息,否则,不发送该第二通知消息。
步骤401d,若在定时到达该第二预定时间长度的过程中,未接收到该第二通知消息,则确定在接收到由该目标线程进行处理的用户操作之后的第二预定时间长度时间段内,未监测到该标志性事件。
在上述定时器timer A运行过程中,若监控组件接收到网络视图控件发送的该第二通知消息,则确定在接收到由该目标线程进行处理的用户操作之后的第二预定时间长度时间段内,监测到该标志性事件,此时说明目标线程运行正常,则取消定时器timer A;若在上述定时器timer A运行到达第二预定时间长度时,监控组件仍未接收到网络视图控件发送的该第二通知消息,则确定在接收到由该目标线程进行处理的用户操作之后的第二预定时间长度时间段内,未监测到该标志性事件,说明目标线程有可能发生卡死现象,执行后续步骤402。
具体的,以用户在浏览器中执行输入网址操作、返回上一页面操作、进入下一页面操作或者刷新当前页面操作为例,当用户在浏览器中执行上述操作时,浏览器的内核线程在成功处理上述操作后,会向网络视图控件发送历史堆栈变更消息,该历史堆栈变更消息用于指示该网络视图控件对该浏览器的历史堆栈(历史堆栈是用于记录网络视图控件对应的标签页显示过的网址的堆栈)进行变更。因此,本发明实施例中,用户操作可以包括:输入网址操作、返回上一页面操作、进入下一页面操作或者刷新当前页面操作时,可以设置该标志性事件为:网络视图控件接收到目标线程发送的历史堆栈变更消息。
步骤402,若在该第二预定时间长度时间段内未监测到该标志性事件,则启动获取目标线程对应的探测响应。
步骤403,检测在启动获取探测响应之后的第一预定时间长度时间段内,是否获取到该探测响应。
步骤404,若在该第一预定时间长度时间段内未获取到该探测响应,则获取该目标线程的函数调用信息,该函数调用信息是用于分析该目标线程的卡死原因的信息。
其中,上述步骤402至步骤404的执行过程可以参考上述图2所示实施例中的步骤201至步骤203,此处不再赘述。
步骤405,将获取到的该函数调用信息上传至服务器。
可选的,在本发明实施例中,函数调用信息中还可以包含上述目标线程对应的第三方应用程序的版本号,以便开发人员根据该函数调用信息,在该相应版本的应用程序代码中进行排查。
可选的,在一种可能的情形中,由于线程迟滞等原因,导致监控组件在上述第二预定时间长度时间段内未监测到用户操作被目标线程处理时产生的标志性事件,而在开始获取探测响应之后的第一预定时间长度时间段内监测到了该标志性事件,此时,即便尚未获取到目标线程生成的探测响应,也可以确认目标线程未发生卡死现象,不需要再执行后续获取目标线程的函数调用信息的步骤,即在第一预定时间长度时间段内未获取到该探测响应,且未监测到标志性事件时,执行上述获取该目标线程的函数调用信息的步骤。
具体的,请参考图6,其示出了本发明实施例涉及的一种获取目标线程的调用栈的时序图。如图6所示,终端中运行的浏览器的一个网络视图控件显示浏览器当前的标签页,用户可以通过点击浏览器中的按键,或者通过滑动触摸的方式对该标签页进行操作,当网络视图控件接收到指定的用户操作(比如输入网址操作、返回上一页面操作、进入下一页面操作或者刷新当前页面操作)时,向内核线程发送操作处理消息,指示内核线程对接收到的用户操作进行处理,同时,网络视图控件向监控组件发送第一通知消息,监控组件接收到该第一通知消息后,启动定时时长为第二预定时间长度的定时器timer A,在定时器timerA的运行过程中,若内核线程未卡死,并对上述用户操作进行了处理,则会向网络视图控件发送历史堆栈变更消息,此时,网络视图控件向监控组件发送第二通知消息(图6未示出),监控组件接收到第二通知消息后,认为内核线程运行正常,并将定时器timer A取消,等到再一次接收到第一通知消息时,再重新启动定时器timer A从0开始计时。若在定时器timer A运行达到定时时长时,监控组件还未接收到网络视图控件发送的第二通知消息,则认为内核线程可能发生了卡死,此时,监控组件向内核线程发送一个探测消息,同时启动定时时长为第一预定时间长度的定时器timer B,在定时器timer B运行的过程中,若接收到内核线程返回的探测响应(图6未示出),则认为内核线程工作正常,即网络视图控件未接收到历史堆栈变更消息的原因并不是内核线程卡死,此时,监控组件取消定时器timer B;或者,在定时器timer B运行的过程中,若尚未接收到内核线程返回的探测响应,但是接收到了网络视图控件发送的第二通知消息,此时,监控组件也会取消定时器timer B。若在定时器timer B运行到达定时时长时,监控组件未接收到内核线程返回的探测响应,也没有接收到网络视图控件发送的第二通知消息,则认为内核线程发生了卡死,此时,监控组件通过信号捕捉函数向***层获取内核线程的上下文信息,并解析上下文信息获得内核线程的调用栈,并将上述调用栈上报到服务器中,方便开发人员查询。
其中,上述方案以网络视图控件接收用户操作并来监控标志性事件和发送通知消息为例进行说明,在实际应用中,上述网络视图控件所执行的步骤也可以由浏览器的主线程(即执行浏览器中用户交互逻辑部分代码的线程)来执行,比如,浏览器的主线程在接收到用户操作时,通知内核线程执行该用户操作,同时向监控组件发送第一通知消息,当浏览器的主线程监测到标志性事件(即接收到历史堆栈变更消息)时,向监控组件发送第二通知消息。
可选的,在本发明实施例所示的方案中,监控组件首先检测在接收到用户操作之后的第二预定时间长度时间段内是否监测到标志性事件,若未监测到标志性事件,则认为目标线程可能发生卡死现象,并在第二预定时间长度时间段结束后的第一预定时间长度时间段内,通过获取目标线程的探测响应的方式来验证目标线程是否真的发生卡死。在实际应用中,若在接收到用户操作之后的第二预定时间长度时间段内未监测到标志性事件,也可以不执行验证目标线程是否真的发生卡死的步骤,即当接收到由目标线程进行处理的用户操作时,监控组件检测在接收到该用户操作之后的第二预定时间长度时间段内,是否监测到标志性事件,若在第二预定时间长度时间段内未监测到该标志性事件,则获取目标线程的函数调用信息。具体比如,探测响应也可以是监测到上述标志性事件时生成的响应消息,即当第三方应用程序接收到用户操作时,若目标线程正常运行并处理了该用户操作,且第三方应用程序检测到该用户操作对应的标志性事件时,会生成探测响应;监控组件在第三方应用程序接收到用户操作时,启动获取上述探测响应,若在启动获取探测响应之后的第二预定时间长度时间段内,未获取到该探测响应,则认为目标线程可能卡死,并执行获取目标线程的函数调用信息的步骤。
综上所述,本发明实施例所示的方法,在目标线程运行的过程中,可以通过获取目标线程正常运行时生成的响应消息检测第三方应用程序中的目标线程是否卡死,并在检测出目标线程卡死时,自动获取该目标线程的函数调用信息并上传服务器,开发人员只需要登录服务器即可以获取第三方应用程序中的目标线程卡死时的函数调用情况,在发现目标线程卡死现象时能够及时获取函数调用信息,提高开发人员修复问题的及时性,并且不需要专门打包可调试版本程序,不需要测试人员通过可调试版本程序进行目标线程卡死现象的复现,也不需要开发人员浪费人力来设置与可调试版本程序相匹配的调试工具,避免了线程卡死的重现和信息导出过程浪费大量的测试时间,以及可调试版本程序与正式发布版本的应用程序之间存在差别而导致线程卡死现象的复现过程产生偏差的问题,同时降低了开发人员与测试人员之间的沟通成本,从而达到提高软件测试效率和测试结果的准确性的效果。
需要说明的是,上述图4所示的实施例中,仅以目标线程是浏览器的内核线程,用户操作是输入网址操作、返回上一页面操作、进入下一页面操作或者刷新当前页面操作,标志性事件是浏览器的网络视图控件接收到内核线程发送的历史堆栈变更消息的应用场景为例进行说明,在实际应用中,本发明所示的方案不仅限于上述应用场景。
比如,当目标线程是浏览器的内核线程时,用户操作可以不仅限于上述几种,还可以有其它一些可以在浏览器中进行的操作(比如对浏览器页面进行缩放的操作等),只要是内核线程处理该用户操作时能够产生相应的可监测的事件,即可以实现本发明所示的方案。
进一步的,上述目标线程也不限于浏览器的内核线程,也可以是浏览器中除了内核线程之外用于处理用户操作的线程,或者,其它类型的第三方应用程序中用于处理用户操作的线程,只要该目标线程在处理用户操作时能够产生可监测的事件,即可以实现本发明所示的方案。
下述为本发明装置实施例,可以用于执行本发明方法实施例。对于本发明装置实施例中未披露的细节,请参照本发明方法实施例。
请参考图7,其示出了一示例性实施例示出的一种线程数据处理装置的框图。该线程数据处理装置可以通过硬件或者软硬结合的方式实现为图1所示实施环境中的终端110的全部或者部分。该线程数据处理装置可以包括:
探测模块701,用于启动获取目标线程对应的探测响应,所述探测响应是目标线程正常运行过程中生成的响应消息;
响应检测模块702,用于检测在启动获取所述探测响应之后的第一预定时间长度时间段内,是否获取到所述探测响应;
信息获取模块703,用于在所述第一预定时间长度时间段内未获取到所述探测响应时,获取所述目标线程的函数调用信息,所述函数调用信息是用于分析所述目标线程的卡死原因的信息。
可选的,所述装置还包括:
事件检测模块,用于在启动获取目标线程的探测响应之前,检测在接收到由所述目标线程进行处理的用户操作之后的第二预定时间长度时间段内,是否监测到标志性事件;
所述探测模块,具体用于在所述第二预定时间长度时间段内未监测到所述标志性事件时,执行所述启动获取目标线程的探测响应的步骤;
其中,所述标志性事件是所述用户操作被所述目标线程处理时产生的事件。
可选的,所述事件检测模块,包括:
通知接收单元,用于接收第一通知消息,所述第一通知消息是接收到所述用户操作后生成的消息;
定时单元,用于启动定时器开始定时;
通知检测单元,用于检测在所述定时器定时到达所述第二预定时间长度的过程中,是否接收到第二通知消息,所述第二通知消息是监测到所述标志性事件时生成的消息;
确定单元,用于在所述定时器定时到达所述第二预定时间长度的过程中,未接收到所述第二通知消息时,确定在接收到由所述目标线程进行处理的用户操作之后的第二预定时间长度时间段内,未监测到所述标志性事件。
可选的,所述目标线程是浏览器的内核线程,所述用户操作包括:输入网址操作、返回上一页面操作、进入下一页面操作或者刷新当前页面操作;所述标志性事件为:接收到所述目标线程发送的历史堆栈变更消息,所述历史堆栈变更消息用于指示对所述浏览器的历史堆栈进行变更。
可选的,所述信息获取模块,具体用于在所述第一预定时间长度时间段内未获取到所述探测响应,且未监测到所述标志性事件时,执行所述获取所述目标线程的函数调用信息的步骤。
可选的,所述信息获取模块,包括:
上下文获取单元,用于通过信号捕捉函数从***层获取所述目标线程的上下文信息;
解析单元,用于将所述上下文信息中携带的,所述目标线程的调用栈解析为所述函数调用信息,所述调用栈用于指示所述目标线程的函数调用关系以及所述函数调用关系中各个函数所在的文件和行号。
可选的,所述探测响应是监测到标志性事件时生成的响应消息,所述标志性事件是所述目标线程处理用户操作后生成的事件,
所述探测模块,具体用于在接收到所述用户操作时,启动获取所述探测响应。
可选的,所述函数调用信息中还包括所述第三方应用程序的版本号,所述装置还包括:
上传模块,用于将获取到的所述函数调用信息上传至服务器。
综上所述,本发明实施例所示的装置,可以通过获取目标线程正常运行时生成的响应消息自动检测第三方应用程序中的目标线程是否卡死,并在检测出目标线程卡死时,自动获取该目标线程的函数调用信息并上传服务器,开发人员只需要登录服务器即可以获取第三方应用程序中的目标线程卡死时的函数调用情况,在发现目标线程卡死现象时能够及时获取函数调用信息,提高开发人员修复问题的及时性,并且不需要专门打包可调试版本程序,不需要测试人员通过可调试版本程序进行目标线程卡死现象的复现,也不需要开发人员浪费人力来设置与可调试版本程序相匹配的调试工具,避免了线程卡死的重现和信息导出过程浪费大量的测试时间,以及可调试版本程序与正式发布版本的应用程序之间存在差别而导致线程卡死现象的复现过程产生偏差的问题,同时降低了开发人员与测试人员之间的沟通成本,从而达到提高软件测试效率和测试结果的准确性的效果。
本发明实施例还提供了一种包括指令的非临时性计算机可读存储介质,例如包括指令的存储器,上述指令可由服务器的处理器执行以完成本发明各个实施例所示的线程数据处理方法。例如,所述非临时性计算机可读存储介质可以是ROM、随机存取存储器(RAM)、CD-ROM、磁带、软盘和光数据存储设备等。
请参考图8,其示出了本发明一示例性实施例提供的终端的结构示意图。本公开实施例中的终端可以包括一个或多个如下组成部分:用于执行计算机程序指令以完成各种流程和方法的处理器,用于信息和存储程序指令随机接入存储器(RAM)和只读存储器(ROM),用于存储数据和信息的存储器,I/O设备,界面,天线等。具体来讲:
终端800可以包括RF(Radio Frequency,射频)电路810、存储器820、输入单元830、显示单元840、传感器850、音频电路860、WiFi(wireless fidelity,无线保真)模块870、处理器880、电源882、摄像头890等部件。本领域技术人员可以理解,图8中示出的终端结构并不构成对终端的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
下面结合图8对终端800的各个构成部件进行具体的介绍:
RF电路810可用于收发信息或通话过程中,信号的接收和发送,特别地,将基站的下行信息接收后,给处理器880处理;另外,将设计上行的数据发送给基站。通常,RF电路包括但不限于天线、至少一个放大器、收发信机、耦合器、LNA(Low Noise Amplifier,低噪声放大器)、双工器等。此外,RF电路810还可以通过无线通信与网络和其他设备通信。所述无线通信可以使用任一通信标准或协议,包括但不限于GSM(Global System of Mobilecommunication,全球移动通讯***)、GPRS(General Packet Radio Service,通用分组无线服务)、CDMA(Code Division Multiple Access,码分多址)、WCDMA(Wideband CodeDivision Multiple Access,宽带码分多址)、LTE(Long Term Evolution,长期演进)、电子邮件、SMS(Short Messaging Service,短消息服务)等。
存储器820可用于存储软件程序以及模块,处理器880通过运行存储在存储器820的软件程序以及模块,从而执行终端800的各种功能应用以及数据处理。存储器820可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作***、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据终端800的使用所创建的数据(比如音频数据、电话本等)等。此外,存储器820可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
输入单元830可用于接收输入的数字或字符信息,以及产生与终端800的用户设置以及功能控制有关的键信号输入。具体地,输入单元830可包括触控面板831以及其他输入设备832。触控面板831,也称为触摸屏,可收集用户在其上或附近的触摸操作(比如用户使用手指、触笔等任何适合的物体或附件在触控面板831上或在触控面板831附近的操作),并根据预先设定的程式驱动相应的连接装置。可选的,触控面板831可包括触摸检测装置和触摸控制器两个部分。其中,触摸检测装置检测用户的触摸方位,并检测触摸操作带来的信号,将信号传送给触摸控制器;触摸控制器从触摸检测装置上接收触摸信息,并将它转换成触点坐标,再送给处理器880,并能接收处理器880发来的命令并加以执行。此外,可以采用电阻式、电容式、红外线以及表面声波等多种类型实现触控面板831。除了触控面板831,输入单元830还可以包括其他输入设备832。具体地,其他输入设备832可以包括但不限于物理键盘、功能键(比如音量控制按键、开关按键等)、轨迹球、鼠标、操作杆等中的一种或多种。
显示单元840可用于显示由用户输入的信息或提供给用户的信息以及终端800的各种菜单。显示单元840可包括显示面板841,可选的,可以采用LCD(Liquid CrystalDisplay,液晶显示器)、OLED(Organic Light-Emitting Diode,有机发光二极管)等形式来配置显示面板841。进一步的,触控面板831可覆盖显示面板841,当触控面板831检测到在其上或附近的触摸操作后,传送给处理器880以确定触摸事件的类型,随后处理器880根据触摸事件的类型在显示面板841上提供相应的视觉输出。虽然在图8中,触控面板831与显示面板841是作为两个独立的部件来实现终端800的输入和输入功能,但是在某些实施例中,可以将触控面板831与显示面板841集成而实现终端800的输入和输出功能。
终端800还可包括至少一种传感器850,比如陀螺仪传感器、磁感应传感器、光传感器、运动传感器以及其他传感器。具体地,光传感器可包括环境光传感器及接近传感器,其中,环境光传感器可根据环境光线的明暗来调节显示面板841的亮度,接近传感器可在终端800移动到耳边时,关闭显示面板841和/或背光。作为运动传感器的一种,加速度传感器可检测各个方向上(一般为三轴)加速度的大小,静止时可检测出重力的大小及方向,可用于识别终端姿态的应用(比如横竖屏切换、相关游戏、磁力计姿态校准)、振动识别相关功能(比如计步器、敲击)等;至于终端800还可配置的气压计、湿度计、温度计、红外线传感器等其他传感器,在此不再赘述。
音频电路860、扬声器861,传声器862可提供用户与终端800之间的音频接口。音频电路860可将接收到的音频数据转换后的电信号,传输到扬声器861,由扬声器861转换为声音信号输出;另一方面,传声器862将收集的声音信号转换为电信号,由音频电路860接收后转换为音频数据,再将音频数据输出处理器880处理后,经RF电路810以发送给比如另一终端,或者将音频数据输出至存储器820以便进一步处理。
WiFi属于短距离无线传输技术,终端800通过WiFi模块870可以帮助用户收发电子邮件、浏览网页和访问流式媒体等,它为用户提供了无线的宽带互联网访问。虽然图8示出了WiFi模块870,但是可以理解的是,其并不属于终端800的必须构成,完全可以根据需要在不改变公开的本质的范围内而省略。
处理器880是终端800的控制中心,利用各种接口和线路连接整个终端的各个部分,通过运行或执行存储在存储器820内的软件程序和/或模块,以及调用存储在存储器820内的数据,执行终端800的各种功能和处理数据,从而对终端进行整体监控。可选的,处理器880可包括一个或多个处理单元;优选的,处理器880可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作***、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器880中。
终端800还包括给各个部件供电的电源882(比如电池),优选的,电源可以通过电源管理***与处理器880逻辑相连,从而通过电源管理***实现管理充电、放电、以及功耗管理等功能。
摄像头890一般由镜头、图像传感器、接口、数字信号处理器、CPU、显示屏幕等组成。其中,镜头固定在图像传感器的上方,可以通过手动调节镜头来改变聚焦;图像传感器相当于传统相机的“胶卷”,是摄像头采集图像的心脏;接口用于把摄像头利用排线、板对板连接器、弹簧式连接方式与终端主板连接,将采集的图像发送给所述存储器820;数字信号处理器通过数学运算对采集的图像进行处理,将采集的模拟图像转换为数字图像并通过接口发送给存储器820。
尽管未示出,终端800还可以包括蓝牙模块等,在此不再赘述。
终端800除了包括一个或者多个处理器880,还包括有存储器,以及一个或者多个程序,其中一个或者多个程序存储于存储器中,并被配置成由一个或者多个处理器执行。处理器880执行上述一个或者多个程序来实现本发明各个实施例所示的线程数据处理方法的全部或者部分步骤。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本发明的其它实施方案。本申请旨在涵盖本发明的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本发明的一般性原理并包括本发明未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本发明的真正范围和精神由下面的权利要求指出。
应当理解的是,本发明并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本发明的范围仅由所附的权利要求来限制。

Claims (16)

1.一种线程数据处理方法,其特征在于,所述方法包括:
启动获取目标线程对应的探测响应,所述探测响应是目标线程正常运行过程中生成的响应消息;
检测在启动获取所述探测响应之后的第一预定时间长度时间段内,是否获取到所述探测响应;
若在所述第一预定时间长度时间段内未获取到所述探测响应,则获取所述目标线程的函数调用信息,所述函数调用信息是用于分析所述目标线程的卡死原因的信息。
2.根据权利要求1所述的方法,其特征在于,所述启动获取目标线程的探测响应之前,还包括:
检测在接收到由所述目标线程进行处理的用户操作之后的第二预定时间长度时间段内,是否监测到标志性事件;
若在所述第二预定时间长度时间段内未监测到所述标志性事件,则执行所述启动获取目标线程的探测响应的步骤;
其中,所述标志性事件是所述用户操作被所述目标线程处理时产生的事件。
3.根据权利要求2所述的方法,其特征在于,所述检测在接收到由所述目标线程进行处理的用户操作之后的第二预定时间长度时间段内,是否监测到所述用户操作对应的标志性事件,包括:
接收第一通知消息,所述第一通知消息是接收到所述用户操作时生成的消息;
开始启动定时;
检测在定时到达所述第二预定时间长度的过程中,是否接收到第二通知消息,所述第二通知消息是监测到所述标志性事件时生成的消息;
若在定时到达所述第二预定时间长度的过程中,未接收到所述第二通知消息,则确定在接收到由所述目标线程进行处理的用户操作之后的第二预定时间长度时间段内,未监测到所述标志性事件。
4.根据权利要求3所述的方法,其特征在于,所述目标线程是浏览器的内核线程,所述用户操作包括:输入网址操作、返回上一页面操作、进入下一页面操作或者刷新当前页面操作;
所述标志性事件为:接收到历史堆栈变更消息,所述历史堆栈变更消息用于指示对所述浏览器的历史堆栈进行变更。
5.根据权利要求2至4任一所述的方法,其特征在于,所述若在所述第一预定时间长度时间段内未获取到所述探测响应,则获取所述目标线程的函数调用信息,包括:
若在所述第一预定时间长度时间段内未获取到所述探测响应,且未监测到所述标志性事件,则执行所述获取所述目标线程的函数调用信息的步骤。
6.根据权利要求1至4任一所述的方法,其特征在于,所述获取所述目标线程的函数调用信息,包括:
通过信号捕捉函数从***层获取所述目标线程的上下文信息;
将所述上下文信息中携带的所述目标线程的调用栈解析为所述函数调用信息,所述调用栈用于指示所述目标线程的函数调用关系以及所述函数调用关系中各个函数所在的文件和行号。
7.根据权利要求1所述的方法,其特征在于,所述探测响应是监测到标志性事件时生成的响应消息,所述标志性事件是所述目标线程处理用户操作后生成的事件,所述启动获取目标线程对应的探测响应,包括:
在接收到所述用户操作时,启动获取所述探测响应。
8.根据权利要求1、2、3、4或7任一所述的方法,其特征在于,所述函数调用信息中还包括所述第三方应用程序的版本号,所述方法还包括:
将获取到的所述函数调用信息上传至服务器。
9.一种线程数据处理装置,其特征在于,所述装置包括:
探测模块,用于启动获取目标线程对应的探测响应,所述探测响应是目标线程正常运行过程中生成的响应消息;
响应检测模块,用于检测在启动获取所述探测响应之后的第一预定时间长度时间段内,是否获取到所述探测响应;
信息获取模块,用于在所述第一预定时间长度时间段内未获取到所述探测响应时,获取所述目标线程的函数调用信息,所述函数调用信息是用于分析所述目标线程的卡死原因的信息。
10.根据权利要求9所述的装置,其特征在于,所述装置还包括:
事件检测模块,用于在启动获取目标线程的探测响应之前,检测在接收到由所述目标线程进行处理的用户操作之后的第二预定时间长度时间段内,是否监测到标志性事件;
所述探测模块,具体用于在所述第二预定时间长度时间段内未监测到所述标志性事件时,执行所述启动获取目标线程的探测响应的步骤;
其中,所述标志性事件是所述用户操作被所述目标线程处理时产生的事件。
11.根据权利要求10所述的装置,其特征在于,所述事件检测模块,包括:
通知接收单元,用于接收第一通知消息,所述第一通知消息是接收到所述用户操作后生成的消息;
定时单元,用于启动定时器开始定时;
通知检测单元,用于检测在所述定时器定时到达所述第二预定时间长度的过程中,是否接收到第二通知消息,所述第二通知消息是监测到所述标志性事件时生成的消息;
确定单元,用于在所述定时器定时到达所述第二预定时间长度的过程中,未接收到所述第二通知消息时,确定在接收到由所述目标线程进行处理的用户操作之后的第二预定时间长度时间段内,未监测到所述标志性事件。
12.根据权利要求11所述的装置,其特征在于,所述目标线程是浏览器的内核线程,所述用户操作包括:输入网址操作、返回上一页面操作、进入下一页面操作或者刷新当前页面操作;
所述标志性事件为:接收到所述目标线程发送的历史堆栈变更消息,所述历史堆栈变更消息用于指示对所述浏览器的历史堆栈进行变更。
13.根据权利要求10至12任一所述的装置,其特征在于,
所述信息获取模块,具体用于在所述第一预定时间长度时间段内未获取到所述探测响应,且未监测到所述标志性事件时,执行所述获取所述目标线程的函数调用信息的步骤。
14.根据权利要求9至12任一所述的装置,其特征在于,所述信息获取模块,包括:
上下文获取单元,用于通过信号捕捉函数从***层获取所述目标线程的上下文信息;
解析单元,用于将所述上下文信息中携带的所述目标线程的调用栈解析为所述函数调用信息,所述调用栈用于指示所述目标线程的函数调用关系以及所述函数调用关系中各个函数所在的文件和行号。
15.根据权利要求9所述的装置,其特征在于,所述探测响应是监测到标志性事件时生成的响应消息,所述标志性事件是所述目标线程处理用户操作后生成的事件,
所述探测模块,具体用于在接收到所述用户操作时,启动获取所述探测响应。
16.根据权利要求9、10、11、12或15任一所述的装置,其特征在于,所述函数调用信息中还包括所述第三方应用程序的版本号,所述装置还包括:
上传模块,用于将获取到的所述函数调用信息上传至服务器。
CN201610966687.3A 2016-10-28 2016-10-28 线程数据处理方法及装置 Active CN108021496B (zh)

Priority Applications (3)

Application Number Priority Date Filing Date Title
CN201610966687.3A CN108021496B (zh) 2016-10-28 2016-10-28 线程数据处理方法及装置
PCT/CN2017/101444 WO2018076945A1 (zh) 2016-10-28 2017-09-12 线程数据处理方法、装置及终端
US16/297,241 US10877745B2 (en) 2016-10-28 2019-03-08 Apparatus and method for thread data processing

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610966687.3A CN108021496B (zh) 2016-10-28 2016-10-28 线程数据处理方法及装置

Publications (2)

Publication Number Publication Date
CN108021496A true CN108021496A (zh) 2018-05-11
CN108021496B CN108021496B (zh) 2020-09-04

Family

ID=62023065

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610966687.3A Active CN108021496B (zh) 2016-10-28 2016-10-28 线程数据处理方法及装置

Country Status (3)

Country Link
US (1) US10877745B2 (zh)
CN (1) CN108021496B (zh)
WO (1) WO2018076945A1 (zh)

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109361557A (zh) * 2018-12-13 2019-02-19 上海二三四五网络科技有限公司 一种监测浏览器卡死的控制方法及控制装置
CN109918145A (zh) * 2019-01-10 2019-06-21 北京字节跳动网络技术有限公司 一种应用程序冷启动的加速方法、装置、电子设备
CN109960659A (zh) * 2019-03-29 2019-07-02 百度国际科技(深圳)有限公司 用于检测应用程序的方法和装置
CN110413432A (zh) * 2019-07-02 2019-11-05 Oppo广东移动通信有限公司 一种信息处理方法、电子设备及存储介质
CN112202639A (zh) * 2020-09-30 2021-01-08 重庆长安汽车股份有限公司 一种通过LoadRunner工具实现车联网远程控制服务的性能测试方法
CN112540915A (zh) * 2020-11-30 2021-03-23 锐捷网络股份有限公司 接口测试方法、装置和***
CN112596938A (zh) * 2020-12-26 2021-04-02 中国农业银行股份有限公司 一种异常监控方法及装置

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109597548B (zh) * 2018-11-16 2020-05-12 北京字节跳动网络技术有限公司 菜单显示方法、装置、设备及存储介质
US11144369B2 (en) * 2019-12-30 2021-10-12 Bank Of America Corporation Preemptive self-healing of application server hanging threads
CN111966577B (zh) * 2020-07-06 2023-09-08 北京奇艺世纪科技有限公司 一种程序稳定性检测方法及装置
CN111984544B (zh) * 2020-09-08 2024-03-22 网易(杭州)网络有限公司 设备性能测试方法、装置、电子设备及存储介质
CN112685100A (zh) * 2020-12-31 2021-04-20 深圳市大富网络技术有限公司 一种线程启动方法、***及装置
CN114282217A (zh) * 2021-12-22 2022-04-05 完美世界征奇(上海)多媒体科技有限公司 游戏外挂的检测方法和装置、存储介质、电子装置

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101354677A (zh) * 2008-09-11 2009-01-28 青岛海信移动通信技术股份有限公司 一种应用程序运行状态的检测方法、恢复方法及装置
US8051418B1 (en) * 2005-03-21 2011-11-01 Oracle America, Inc. Techniques for providing improved affinity scheduling in a multiprocessor computer system
CN104268055A (zh) * 2014-09-01 2015-01-07 腾讯科技(深圳)有限公司 一种程序异常的监控方法和装置
CN105740326A (zh) * 2016-01-21 2016-07-06 腾讯科技(深圳)有限公司 浏览器的线程状态监测方法及装置

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2000054385A1 (en) * 1999-03-10 2000-09-14 Preview Systems, Inc. User transparent software malfunction detection and reporting
US7958512B2 (en) * 2005-10-31 2011-06-07 Microsoft Corporation Instrumentation to find the thread or process responsible for an application failure
US8832665B2 (en) * 2007-08-14 2014-09-09 Dynatrace Software Gmbh Method and system for tracing individual transactions at the granularity level of method calls throughout distributed heterogeneous applications without source code modifications including the detection of outgoing requests
US8626904B1 (en) * 2011-03-09 2014-01-07 Symantec Corporation Detecting and reporting livelocks in a computer
CN102722559B (zh) * 2012-05-31 2015-09-16 北京奇虎科技有限公司 一种异常页面的进程控制方法、装置和***
US9953093B1 (en) * 2012-09-04 2018-04-24 Google Llc Mapping system for a browser history stack and a browser page state
CN104461829B (zh) * 2014-12-15 2016-08-24 北京奇虎科技有限公司 基于窗口应用的计算设备优化方法及设备
CN105740080B (zh) * 2016-03-11 2019-02-22 深圳市茁壮网络股份有限公司 一种程序卡死检测方法及处理器

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8051418B1 (en) * 2005-03-21 2011-11-01 Oracle America, Inc. Techniques for providing improved affinity scheduling in a multiprocessor computer system
CN101354677A (zh) * 2008-09-11 2009-01-28 青岛海信移动通信技术股份有限公司 一种应用程序运行状态的检测方法、恢复方法及装置
CN104268055A (zh) * 2014-09-01 2015-01-07 腾讯科技(深圳)有限公司 一种程序异常的监控方法和装置
CN105740326A (zh) * 2016-01-21 2016-07-06 腾讯科技(深圳)有限公司 浏览器的线程状态监测方法及装置

Cited By (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109361557A (zh) * 2018-12-13 2019-02-19 上海二三四五网络科技有限公司 一种监测浏览器卡死的控制方法及控制装置
CN109361557B (zh) * 2018-12-13 2022-05-06 上海二三四五网络科技有限公司 一种监测浏览器卡死的控制方法及控制装置
CN109918145A (zh) * 2019-01-10 2019-06-21 北京字节跳动网络技术有限公司 一种应用程序冷启动的加速方法、装置、电子设备
CN109960659A (zh) * 2019-03-29 2019-07-02 百度国际科技(深圳)有限公司 用于检测应用程序的方法和装置
CN110413432A (zh) * 2019-07-02 2019-11-05 Oppo广东移动通信有限公司 一种信息处理方法、电子设备及存储介质
CN110413432B (zh) * 2019-07-02 2023-09-01 Oppo广东移动通信有限公司 一种信息处理方法、电子设备及存储介质
CN112202639A (zh) * 2020-09-30 2021-01-08 重庆长安汽车股份有限公司 一种通过LoadRunner工具实现车联网远程控制服务的性能测试方法
CN112202639B (zh) * 2020-09-30 2022-08-09 重庆长安汽车股份有限公司 一种通过LoadRunner工具实现车联网远程控制服务的性能测试方法
CN112540915A (zh) * 2020-11-30 2021-03-23 锐捷网络股份有限公司 接口测试方法、装置和***
CN112540915B (zh) * 2020-11-30 2024-07-19 锐捷网络股份有限公司 接口测试方法、装置和***
CN112596938A (zh) * 2020-12-26 2021-04-02 中国农业银行股份有限公司 一种异常监控方法及装置

Also Published As

Publication number Publication date
WO2018076945A1 (zh) 2018-05-03
US10877745B2 (en) 2020-12-29
US20190205123A1 (en) 2019-07-04
CN108021496B (zh) 2020-09-04

Similar Documents

Publication Publication Date Title
CN108021496A (zh) 线程数据处理方法及装置
CN105320598B (zh) 软件测试方法及装置
CN109542689A (zh) 应用程序处理方法、终端以及计算机可读存储介质
CN106534940A (zh) 直播入口预览图的显示方法及装置
CN105528297A (zh) 对web页面进行测试的方法及装置
CN110366212A (zh) 一种条件切换结果的检测方法及终端
WO2015039601A1 (en) Methods, devices, terminal device and systems for pattern recognition
CN107273263A (zh) 一种异常运行的分析方法、应用终端及监控服务器
CN112148579B (zh) 一种用户界面的测试方法和装置
CN105740145B (zh) 定位控件中的元素的方法及装置
CN105389259B (zh) 一种进行应用程序测试的方法、装置及***
CN106649126A (zh) 一种对应用程序进行测试的方法和装置
CN106021112A (zh) 程序测试***、方法及装置
CN109753425A (zh) 弹窗处理方法及装置
WO2017111313A1 (ko) 웹푸시를 이용한 푸시 서비스 제공 방법 및 이를 지원하는 전자 장치
CN108541009A (zh) 一种通信状态的检测方法和终端设备
CN107783906A (zh) 测试方法、装置及存储介质
CN104573437B (zh) 信息认证方法、装置和终端
CN109582565A (zh) 防止应用崩溃的方法、终端及计算机存储介质
CN110445746A (zh) cookie获取方法、装置及存储设备
CN108920054A (zh) 一种应用推荐方法及终端
CN106020945B (zh) 快捷项添加方法及装置
CN108052430A (zh) 移动终端重启定位方法、移动终端及计算机可读存储介质
CN110069407A (zh) 一种应用程序的功能测试方法和装置
CN107861827A (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
GR01 Patent grant
GR01 Patent grant
TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20221125

Address after: 1402, Floor 14, Block A, Haina Baichuan Headquarters Building, No. 6, Baoxing Road, Haibin Community, Xin'an Street, Bao'an District, Shenzhen, Guangdong 518133

Patentee after: Shenzhen Yayue Technology Co.,Ltd.

Address before: 2, 518000, East 403 room, SEG science and Technology Park, Zhenxing Road, Shenzhen, Guangdong, Futian District

Patentee before: TENCENT TECHNOLOGY (SHENZHEN) Co.,Ltd.