提取程序无响应发生时函数栈的提取方法和装置制造方法及图纸

技术编号:15260505 阅读:57 留言:0更新日期:2017-05-03 13:22
本申请公开了一种提取程序无响应时函数栈的提取方法和装置,其中提取方法包括:建立子线程,并通过所述子线程建立第一变量和第二变量,其中,所述第二变量等于所述第一变量;所述子线程发送任务至主线程,其中,所述任务用于在被所述主线程执行时修改所述第一变量;所述子线程在预设时间之后判断所述第一变量和第二变量是否相等;以及如果所述第一变量和第二变量相等,则所述子线程判断所述任务未被所述主线程执行而导致程序无响应,并提取所述主线程当前的函数栈。该方法通过跨线程之间的交互来实现程序无响应发生时主线程中函数栈的提取,整个提取过程完全自动化,无需人工参与,降低了开发人员的工作量,降低了人工成本,提高了效率。

Method and device for extracting function stack when no response occurs

The invention discloses an extraction procedure no response function stack extraction method and apparatus, including the extraction method: a sub thread, and the thread to establish the first variable and second variables, among them, the second variable is equal to the first variable; the sub thread sends the task to the main thread. Among them, the task is used to modify the first variable in the main thread; the thread at a preset time after the judgment of the first variable and second variables are equal; and if the first variable and second variables are equal, whether the thread of the task is not the main thread execution caused no response, and extracting the main thread of the function stack. The method to realize the program stack extraction function is the main thread of the response occurs through the interaction of cross between threads, the entire extraction process is completely automatic, without artificial participation, reduce the workload, reduce labor costs, improve efficiency.

【技术实现步骤摘要】

本申请涉及移动终端
,特别涉及一种提取程序无响应发生时函数栈的提取方法和装置
技术介绍
通常,在Android(安卓)系统中,如果应用程序有一段时间响应不灵敏,系统会向用户显示一个对话框,这个对话框被称作应用程序无响应(ApplicationNotResponding,简称ANR)对话框,用户可以选择该对话框上的“等待”按钮而让程序继续运行,也可以选择该对话框上的“强制关闭”按钮来中断程序的运行。因此,在每次出现ANR的情况时,用户都要对应用程序无响应对话框进行处理,从而造成用户的体验感变差。为了提升用户体验,设计流畅合理的应用程序成为必要。开发人员在开发应用程序时,需要通过抓取应用程序无响应来完善该应用程序。相关技术中,抓取应用程序无响应(即ANR)的方法主要是:可先抓取出移动终端(如手机等)上/data/anr目录下的traces.txt文件(即应用程序错误信息反馈文件),之后,通过人工分析该文件里面的函数栈信息,找出属于某个应用程序的ANR。但是存在的问题是,上述抓取ANR的方法,流程比较复杂,并且整个抓取过程主要都是通过人工来操作,增加了开发人员的工作量,增加了人工成本,且效率低。
技术实现思路
本申请的目的旨在至少在一定程度上解决上述的技术问题之一。为此,本申请的第一个目的在于提出了一种提取程序无响应发生时函数栈的提取方法。该方法通过跨线程之间的交互来实现程序无响应发生时主线程中函数栈的提取,整个提取过程完全自动化,无需人工参与,降低了开发人员的工作量,降低了人工成本,提高了效率。本申请的第二个目的在于提出了一种提取程序无响应发生时函数栈的提取装置。为达上述目的,根据本申请第一方面的实施例提出了一种提取程序无响应发生时函数栈的提取方法,包括以下步骤:建立子线程,并通过所述子线程建立第一变量和第二变量,其中,所述第二变量等于所述第一变量;所述子线程发送任务至主线程,其中,所述任务用于在被所述主线程执行时修改所述第一变量;所述子线程在预设时间之后判断所述第一变量和第二变量是否相等;以及如果所述第一变量和第二变量相等,则所述子线程判断所述任务未被所述主线程执行而导致程序无响应,并提取所述主线程当前的函数栈。本申请实施例的提取程序无响应发生时函数栈的提取方法,可建立子线程,并通过子线程发送任务至主线程,并在预设时间后子线程判断任务有无被主线程执行,如果判断出上述任务没有被主线程执行则提取上述主线程当前的函数栈,即通过跨线程之间的交互来实现程序无响应发生时主线程中函数栈的提取,整个提取过程完全自动化,无需人工参与,降低了开发人员的工作量,降低了人工成本,提高了效率,并且通过将提取到的函数栈提交到移动后台,方便了开发人员发现并解决问题。为达上述目的,根据本申请的第二方面的实施例提出了一种提取程序无响应发生时函数栈的提取装置,包括:建立模块,用于建立子线程,并通过所述子线程建立第一变量和第二变量,其中,所述第二变量等于所述第一变量;子线程控制模块,其中,所述子线程控制模块包括:任务发送子模块,用于发送任务至主线程,其中,所述任务用于在被所述主线程执行时修改所述第一变量;判断子模块,用于在预设时间之后判断所述第一变量和第二变量是否相等;以及提取子模块,用于在所述第一变量和第二变量相等时,判断所述任务未被所述主线程执行而导致程序无响应,并提取所述主线程当前的函数栈。本申请实施例的提取程序无响应发生时函数栈的提取装置,可通过建立模块建立子线程,并通过子线程控制模块中的任务发送子模块发送任务至主线程,并在预设时间后判断子模块判断任务有无被主线程执行,如果判断出上述任务没有被主线程执行则通过提取子模块提取上述主线程当前的函数栈,即通过跨线程之间的交互来实现程序无响应发生时主线程中函数栈的提取,整个提取过程完全自动化,无需人工参与,降低了开发人员的工作量,降低了人工成本,提高了效率,并且通过将提取到的函数栈提交到移动后台,方便了开发人员发现并解决问题。本申请附加的方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本申请的实践了解到。附图说明本申请的上述和/或附加的方面和优点从结合下面附图对实施例的描述中将变得明显和容易理解,其中:图1是根据本申请一个实施例的提取程序无响应发生时函数栈的提取方法的流程图;图2是根据本申请一个具体实施例的提取程序无响应发生时函数栈的提取方法的示例图;图3是根据本申请另一个具体实施例的提取程序无响应发生时函数栈的提取方法的流程图;图4是根据本申请一个实施例的提取程序无响应发生时函数栈的提取装置的结构框图;以及图5是根据本申请另一个实施例的提取程序无响应发生时函数栈的提取装置的结构框图。具体实施方式下面详细描述本申请的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,旨在用于解释本申请,而不能理解为对本申请的限制。下面参考附图描述本申请实施例的提取程序无响应发生时函数栈的提取方法和装置。图1是根据本申请一个实施例的提取程序无响应发生时函数栈的提取方法的流程图。需要说明的是,本申请实施例的提取程序无响应发生时函数栈的提取方法适用于具有Android操作系统的移动终端,该移动终端可以是手机、平板电脑、个人数字助理等硬件设备。此外,上述程序可以是安装在移动终端上的应用程序,为了方便描述,后续实施例中将以测试应用程序进行描述。如图1所示,该提取程序无响应发生时函数栈的提取方法,包括以下步骤:S110,建立子线程,并通过子线程建立第一变量和第二变量,其中,第二变量等于第一变量。具体地,在本申请的一个实施例中,假设本申请实施例的提取方法应用于具有Android操作系统的移动终端上,当测试应用程序第一次启动时,移动终端可针对该测试应用程序建立一个对应的子线程,并且通过该子线程建立第一变量index和第二变量lastIndex,并将第二变量lastIndex等于第一变量index。例如,可将第一变量index赋初始值,然后将第二变量lastIndex的值等于第一变量index的初始值。优选地,为了保证第一变量index在多线程访问时不被其他线程影响,在本申请的一个实施例中,在通过子线程建立第一变量之后,还可将该第一变量的属性设置为不稳定变量属性值Volatile,以便于接下来对第一变量的修改。需要说明的是,通过将第一变量属性值设置为Volatile,可以保证第一变量在多线程访问时不被其他线程所影响,Volatile是一个类型修饰符,它用来修饰被不同线程访问和修改的变量,在本申请的实施例中,将第一变量的属性值设置为Volatile相当于告诉系统这个变量可能会被意想不到的改变,这样系统的编译器就不会去假设这个变量的值,也就是说,系统的优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,可以理解通过将第一变量的属性值设置为Volatile,可以保证第一变量的值能准确反映应用程序的线程有无被主线程执行,也就是说只要检测到第一变量值变化,就代表对应的子线程被主线程执行,同时,只要第一变量值没有发生变化,就代表对应的子线程没有被主本文档来自技高网...
提取程序无响应发生时函数栈的提取方法和装置

【技术保护点】
一种提取程序无响应发生时函数栈的提取方法,其特征在于,包括以下步骤:建立子线程,并通过所述子线程建立第一变量和第二变量,其中,所述第二变量等于所述第一变量;所述子线程发送任务至主线程,其中,所述任务用于在被所述主线程执行时修改所述第一变量;所述子线程在预设时间之后判断所述第一变量和第二变量是否相等;以及如果所述第一变量和第二变量相等,则所述子线程判断所述任务未被所述主线程执行而导致程序无响应,并提取所述主线程当前的函数栈。

【技术特征摘要】
1.一种提取程序无响应发生时函数栈的提取方法,其特征在于,包括以下步骤:建立子线程,并通过所述子线程建立第一变量和第二变量,其中,所述第二变量等于所述第一变量;所述子线程发送任务至主线程,其中,所述任务用于在被所述主线程执行时修改所述第一变量;所述子线程在预设时间之后判断所述第一变量和第二变量是否相等;以及如果所述第一变量和第二变量相等,则所述子线程判断所述任务未被所述主线程执行而导致程序无响应,并提取所述主线程当前的函数栈。2.如权利要求1所述的提取程序无响应发生时函数栈的提取方法,其特征在于,还包括:如果所述第一变量和第二变量不相等,则所述子线程判断所述任务已被所述主线程执行。3.如权利要求1所述的提取程序无响应发生时函数栈的提取方法,其特征在于,其中,所述任务在被所述主线程执行时使得第一变量加1之后取余。4.如权利要求1所述的提取程序无响应发生时函数栈的提取方法,其特征在于,在所述建立所述第一变量之后,还包括:将所述第一变量的属性设置为不稳定变量属性值Volatile。5.如权利要求1所述的提取程序无响应发生时函数栈的提取方法,其特征在于,所述任务在被所述主线程执行时,还用于控制所述子线程休眠所述预设时间。6.一种提取程序无响应发生时函数栈的...

【专利技术属性】
技术研发人员:方刚
申请(专利权)人:阿里巴巴集团控股有限公司
类型:发明
国别省市:开曼群岛;KY

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1