掌桥专利:专业的专利平台
掌桥专利
首页

一种对错误代码进行定位的方法及相关装置

文献发布时间:2023-06-19 18:37:28


一种对错误代码进行定位的方法及相关装置

技术领域

本文件涉及计算机技术领域,尤其涉及一种对错误代码进行定位的方法及相关装置。

背景技术

在端侧利用虚拟机并行执行应用程序的多个线程,是目前应用客户端常用的加载执行方式。但是,在端侧复杂环境中存在一定量的线程崩溃异常,这些崩溃异常的产生,不一定是虚拟机本身的问题,很大程度上是由于某个脚本或某段逻辑形成的错误代码在执行时触发。

虽然现有技术中有针对端侧多虚拟机执行环境下进程崩溃的问题定位,但是,最终只能定位到引发崩溃异常的问题任务,无法精准定位引发异常的错误代码。

发明内容

本说明书一个或多个实施例的目的是提供一种对错误代码进行定位的方法及相关装置,通过对每个虚拟机的工作线程进行追踪记录,以便于在由虚拟机的工作线程出错而导致进程异常时,精准定位引发异常的错误代码。

为解决上述技术问题,本说明书一个或多个实施例是这样实现的:

第一方面,提出了一种对错误代码进行定位的方法,应用于包含多个虚拟机的终端,所述多个虚拟机支持并发执行,且每个虚拟机对应一个工作线程,每个工作线程配置有追踪组件,以对工作线程进行独立追踪记录;所述方法包括:

在检测到应用进程异常时,根据回调信息判断引发异常的工作线程是否为虚拟机的工作线程,其中,所述回调信息至少包含线程标识和线程状态;

如果是虚拟机的工作线程,则根据所述回调信息中的线程标识查找该虚拟机的工作线程对应的追踪组件;

基于查找到的追踪组件获取对所述虚拟机的工作线程进行追踪记录的堆栈信息,其中,不同虚拟机的工作线程被追踪组件追踪记录的堆栈信息之间相互隔离存储;

基于获取到的堆栈信息中最新栈帧定位错误代码。

第二方面,提出了一种对错误代码进行定位的装置,应用于包含多个虚拟机的终端,所述多个虚拟机支持并发执行,且每个虚拟机对应一个工作线程,每个工作线程配置有追踪组件,以对工作线程进行独立追踪记录;所述装置包括:

判断模块,用于在检测到应用进程异常时,根据回调信息判断引发异常的工作线程是否为虚拟机的工作线程,其中,所述回调信息至少包含线程标识和线程状态;

查找模块,用于在判断模块判断引发异常的工作线程是虚拟机的工作线程时,根据所述回调信息中的线程标识查找该虚拟机的工作线程对应的追踪组件;

获取模块,用于基于查找到的追踪组件获取对所述虚拟机的工作线程进行追踪记录的堆栈信息,其中,不同虚拟机的工作线程被追踪组件追踪记录的堆栈信息之间相互隔离存储;

定位模块,用于基于获取到的堆栈信息中最新栈帧定位错误代码。

第三方面,提出了一种电子设备,包括:

处理器;以及

被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器执行第一方面所述的对错误代码进行定位的方法。

第四方面,提出了一种计算机可读存储介质,所述计算机可读存储介质存储一个或多个程序,所述一个或多个程序当被包括多个应用程序的电子设备执行时,使得所述电子设备执行第一方面所述的对错误代码进行定位的方法。

由以上说明书一个或多个实施例提供的技术方案可见,通过对能够支持并发执行的多个虚拟机对应的工作线程的执行过程进行追踪,并记录能够表示解释器运行状态的堆栈信息;在进程异常时,且判断该进程异常是由虚拟机的工作线程引发的情况下,基于回调信息中的线程标识查找对引发异常的工作线程进行追踪的追踪组件,进而获取该追踪组件记录的堆栈信息,并根据该堆栈信息中最新栈帧定位到错误代码,甚至还可以进行堆栈回溯,定位到错误代码的代码名称、代码行等代码详情。可见,由于通过对虚拟机的工作线程进行追踪,并记录堆栈信息,可以在进程异常时,利用追踪记录的堆栈信息及时精准定位到错误代码,甚至错误代码行等代码详情,提升了定位问题的精准度,方便对相关任务进行下线或改写进行止损,为问题修复提供了较好的引导参照。

附图说明

为了更清楚地说明本说明书一个或多个实施例或现有技术中的技术方案,下面将对一个或多个实施例或现有技术描述中所需要使用的附图做简单介绍,显而易见地,以下描述中的附图仅仅是本说明书中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本说明书实施例提供的一种对错误代码进行定位的方法步骤示意图。

图2是本说明书实施例提供的端侧中多个虚拟机对应的工作线程的原理示意图。

图3是本说明书实施例提供的对错误代码进行定位的流程示意图。

图4是本说明书实施例提供的一种对错误代码进行定位的装置结构示意图。

图5是本说明书的一个实施例提供的电子设备的结构示意图。

具体实施方式

为了使本技术领域的人员更好地理解本说明书中的技术方案,下面将结合本说明书一个或多个实施例中的附图,对本说明书一个或多个实施例中的技术方案进行清楚、完整地描述,显然,所描述的一个或多个实施例只是本说明书一部分实施例,而不是全部的实施例。基于本说明书中的一个或多个实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本文件的保护范围。

如背景技术所言,目前针对端侧复杂环境中产生的进程崩溃异常,只能定位到问题任务的粒度级别,进而根据问题任务执行较大粒度的修复,这无疑给定位以及修复精度带来中伤。鉴于定位以及修复问题的粒度较大而无法保证定位精准的问题,本说明书实施例提出了一种对错误代码进行定位的方案,主要构思在于:通过对能够支持并发执行的多个虚拟机对应的工作线程的执行过程进行追踪,并记录能够表示解释器运行状态的堆栈信息;在进程异常时,且判断该进程异常是由虚拟机的工作线程引发的情况下,基于回调信息中的线程标识查找对引发异常的工作线程进行追踪的追踪组件,进而获取该追踪组件记录的堆栈信息,并根据该堆栈信息中最新栈帧定位到错误代码,甚至还可以进行堆栈回溯,定位到错误代码的代码名称、代码行等代码详情。可见,由于通过对虚拟机的工作线程进行追踪,并记录堆栈信息,可以在进程异常时,利用追踪记录的堆栈信息及时精准定位到错误代码,甚至错误代码行等代码详情,提升了定位问题的精准度,方便对相关任务进行下线或改写进行止损,为问题修复提供了较好的引导参照。

需要说明的是,本说明书实施例中端侧环境下虚拟机所执行的程序代码的脚本语言可以是Python,也可以是C语言或C++或者Java等其它脚本语言,本说明书以Python虚拟机的端侧环境为例进行说明,但是并不对脚本语言的类型进行限定。

参照图1所示,为本说明书实施例提供的一种对错误代码进行定位的方法的步骤示意图。应理解,该方法应用于包含多个虚拟机的终端,参照图2,一个应用程序可以包含多个工作线程,例如,UI工作线程,网络请求工作线程,Python工作线程,其中,每个Python工作线程可以视为一个虚拟机的工作线程。多个虚拟机可以支持并发执行,因此,在端侧可以同时加载并执行多个虚拟机的工作线程。针对每个工作线程,都配置有追踪组件,以对工作线程进行独立追踪记录。其中,该追踪组件实质上是对工作线程进行追踪记录的方法与数据的封装,可视为一个追踪模块或定义为堆栈追踪器。具体实现时,可以将追踪标识嵌入到应用程序的Python解释器的代码中,并通过获取执行过程中堆栈信息实现栈帧的追踪记录。

应理解,上述图2所示的端侧多虚拟机的执行架构,可适用于3D或虚拟现实(Virtual Reality,VR)场景,例如,漫游中大量算法的执行;也可以适用于增强现实(Augmented Reality,AR)场景中,例如对试表、量脚等互动算法推理的执行。

下面结合图2对图1所示的定位方法进行详述。该对错误代码进行定位的方法可以包括以下步骤:

步骤102:在检测到应用进程异常时,根据回调信息判断引发异常的工作线程是否为虚拟机的工作线程,其中,所述回调信息至少包含线程标识和线程状态。

在上述图2所示的端侧环境下,开启应用客户端,应用进程开始,由于多个虚拟机支持并发执行,所以可同时加载多个工作线程。每个工作线程的执行过程可以被配置的追踪组件追踪记录,当进程异常时,所有的工作线程都会被挂起,回调一个用于专门处理进程异常的特殊线程,该特殊线程可以理解为执行图1方法步骤的线程。同时,还会收到一份回调信息,即线程报告,该线程报告可以包含部分或全部工作线程的线程标识以及对应的线程状态。其中,线程标识可以使用数字和/或字符组成的序列号表示,例如,工作线程1,工作线程2,工作线程a等。线程状态可以包括:新建状态、就绪状态、运行状态、阻塞状态和死亡状态等。在该特殊线程中,根据回调信息中包含的线程标识和线程状态,查看每个工作线程的线程状态,如果查找到某个工作线程的线程状态是阻塞状态或死亡状态,则可以确定可能是由于该工作线程的出错引发的进程异常。而且,每个工作线程的线程标识可以额外标记是否属于虚拟机,这样,就可以确定引发进程异常的工作线程是虚拟机的工作线程。

由此,可以根据回调信息中包含的线程标识以及线程状态,判断引发进程异常的工作线程是否为虚拟机的工作线程。例如,回调信息中包含:工作线程1a:新建状态;工作线程2a:运行状态;工作线程3a:死亡状态;工作线程4:就绪状态。从回调信息中确定引发进程异常的工作线程为工作线程3a,由于其携带有虚拟机的工作线程标识a,则确定该工作线程3a是虚拟机的工作线程,进而,判定引发进程异常的工作线程是虚拟机的工作线程。

其实,回调信息中可以仅包含引发异常的工作线程的线程标识和线程状态,换言之,在应用进程异常时,可以仅回调出错的工作线程的线程标识和线程状态,这样,便于根据识别到的线程标识和线程状态判断引发异常的工作线程是否为虚拟机的工作线程。例如,回调信息中包含:工作线程3a:死亡状态。从回调信息中确定引发进程异常的工作线程为工作线程3a,由于其携带有虚拟机的工作线程标识a,则确定该工作线程3a是虚拟机的工作线程,进而,判定引发进程异常的工作线程是虚拟机的工作线程。

步骤104:如果是虚拟机的工作线程,则根据所述回调信息中的线程标识查找该虚拟机的工作线程对应的追踪组件。

参照图2所示,在每个工作线程都配置有追踪组件,这样,可以为每个虚拟机的工作线程进行追踪记录运行过程中的堆栈信息。考虑到端侧支持多个虚拟机并行执行,因此,为每个虚拟机的工作线程配置的追踪组件在进行追踪记录时是相互隔离的,每个追踪组件根据追踪记录的工作线程的执行情况生成独立的追踪内容,即堆栈信息。

考虑到多个虚拟机是在端侧维护的,因此,这些虚拟机和作为宿主的端侧的线程直接绑定,为了避免混淆,可以使用可移植操作系统接口线程Pthread专有的应用程序接口API进行线程级别的信息存储,即使用Pthread专有的相关API为虚拟机定义并创建工作线程,然后,通过在解释器的代码中嵌入追踪标识的方式对每个工作线程的加载运行情况进行追踪记录。

一种可实现的方案,可以在本地维护一张线程标识与追踪组件标识的映射关系表,该映射关系表反映了虚拟机执行的工作线程与相应追踪组件之间的一一对应关系。

在一般情况下,一个应用可以包含多个工作线程,端侧的每个虚拟机都分配有一个工作线程,当应用进程崩溃异常时,有可能是任何工作线程发生崩溃。一旦检测到应用进程异常,与应用进程执行相关的工作线程均被挂起。此时可以通过回调的特殊线程获取到线程报告,根据线程报告中线程标识,遍历本地维护的线程标识与追踪组件标识的映射关系表,以查找到引发进程异常的虚拟机的工作线程对应的追踪组件。

步骤106:基于查找到的追踪组件获取对所述虚拟机的工作线程进行追踪记录的堆栈信息,其中,不同虚拟机的工作线程被追踪组件追踪记录的堆栈信息之间相互隔离存储。

在本说明书实施例中,为了能够对进程发生异常的诱因精准定位,需要找到合适粒度的追踪采样点。一种较为优选的方案是以解释器的栈帧作为追踪采样点进行追踪记录,这样就可以实现指令级别的追踪,相比于任务级别的追踪而言,定位更为精准。具体实现时,可通过每个追踪组件对相应的工作线程中执行的栈帧进行追踪,并在栈帧的执行入口进行记录。

这样,对每个工作线程的执行过程都进行追踪,并记录堆栈信息。可在数据结构存储区域维护堆栈信息库,每个堆栈信息都携带有相应的追踪组件的标识,以便于根据追踪组件从堆栈信息库查找获取到其追踪记录的堆栈信息。所以,在查找到追踪组件之后,就可以根据追踪组件,从堆栈信息库中获取其对引发进程异常的虚拟机的工作线程进行追踪记录的堆栈信息。

应理解,在对栈帧进行追踪时,随着解释器的执行,字节码的偏移量会不断被更新到栈帧,因此,在执行及追踪过程中并不关心偏移量的多少,只需要及时记录最新栈帧即可。所以,在栈帧的执行入口进行追踪记录时,首先判断当前进行执行的栈帧是否发生了变化,如果没有变化,就不需要处理,保持当前栈帧即可,如果发生了变化,则使用最新栈帧替换先前栈帧。

需要说明的是,在栈帧的执行入口执行追踪记录操作时,可以调用WeEval_EvalFrameEx函数实现。但是,该WeEval_EvalFrameEx函数在Python中的调用频率较高,会影响追踪栈帧的性能。鉴于代码对性能的敏感度较高,因此,在对栈帧进行追踪记录时,不进行字符串操作和查表等操作,而且尽可能将时间复杂度控制在0(K)以内,其中,K为常数。在一般情况下,代码优化都是在时间与空间之间权衡,在空间既定的情况下,可以捕获最新执行的栈帧,即在追踪期间额外持有一个栈帧的引用计数,从而通过引用计数使得捕获过程满足常数时间复杂度,进而,确保栈帧的追踪操作在虚拟机中的执行频率尽可能的低,从而保证高性能追踪。其中,栈帧通过f→back链表(即通过栈帧-回溯信息链表)相互连接,且f->back不是借入引用的,因此一旦持有了栈帧,就可以安全持有了整个回溯信息。

步骤108:基于获取到的堆栈信息中最新栈帧定位错误代码。

栈帧可以理解为是一次函数调用,包括将数据和控制从代码的一个部分传递到另外一个部分,栈帧与某个过程调用一一映射。每个函数的每次调用,都有独立的一个栈帧,这个栈帧中维持着所需要的各种信息。因此,在获取到堆栈信息之后,可以根据堆栈信息中最新栈帧定位错误代码。

可选地,在基于获取到的堆栈信息中最新栈帧定位错误代码时,可以从获取到的堆栈信息中确定最新栈帧;基于所述最新栈帧进行堆栈回溯,确定错误代码的代码详情,所述代码详情包括代码名称、代码行以及指令内容。

其中,堆栈回溯可以有两种实现方式:

方式一:使用系统库函数backtrace()自动进行堆栈回溯。

方式二:添加fp,ra等指针,一层一层找到调用的函数地址,并通过函数dladdr()得到函数名,使用此函数时链接选项添加-ldl,头文件可为dlfcn.h。

由此,在获取到的堆栈信息中,以当前更新的最新栈帧,进行堆栈回溯,例如,通过函数A调用函数B,恢复调用函数B前的状态。最终根据堆栈回溯结果,定位在该栈帧的错误代码的代码名称、代码行以及代码指令内容。

进一步,在基于获取到的堆栈信息中最新栈帧定位错误代码之后,还可以将错误代码的代码详情写入预分配的信息存储空间,并添加至异常日志中进行异常上报。

考虑到进程异常时,内存分配以及异步操作都会有阻塞的风险,所以,可以提前为追踪组件记录的相关数据分配好存储空间,并使用信号安全的API。其中,信号安全,其实也就是异步信号安全,是指工作线程在信号处理函数当中,不管以任何方式调用这个函数如果不死锁不修改数据,那就是信号安全的。也就是说一个可重入函数在信号处理函数当中不影响调用该函数本身的状态。

具体可以为每个追踪组件在堆栈信息库中分配一部分存储空间,用于存储每个追踪组件追踪记录的堆栈信息。同时,还可以为每个工作线程或虚拟机分配一个存储空间,用于在定位出错误代码之后,将错误代码的代码详情写入该存储空间进行保存。

通过对能够支持并发执行的多个虚拟机对应的工作线程的执行过程进行追踪,并记录能够表示解释器运行状态的堆栈信息;在进程异常时,且判断该进程异常是由虚拟机的工作线程引发的情况下,基于回调信息中的线程标识查找对引发异常的工作线程进行追踪的追踪组件,进而获取该追踪组件记录的堆栈信息,并根据该堆栈信息中最新栈帧定位到错误代码,甚至还可以进行堆栈回溯,定位到错误代码的代码名称、代码行等代码详情。可见,由于通过对虚拟机的工作线程进行追踪,并记录堆栈信息,可以在进程异常时,利用追踪记录的堆栈信息及时精准定位到错误代码,甚至错误代码行等代码详情,提升了定位问题的精准度,方便对相关任务进行下线或改写进行止损,为问题修复提供了较好的引导参照。

图3所示,为本说明书实施例提供的对错误代码进行定位的流程示意图。

该方案以在端侧利用Python多虚拟机架构执行APP为例,其中所涉及的虚拟机可以是N个,具体根据端侧环境以及服务需求添加或删除。

在端侧启动APP之后,开始执行APP中算法任务,即通过代码解释器执行用编程语言编写的指令的程序,即脚本任务。具体实现时,其实是通过多个虚拟机分别执行算法任务中不同的工作线程,如图3所示,虚拟机执行相应工作线程的流程用方框圈出,这些虚拟机分别对应不同的工作线程,且并行执行。例如,虚拟机VM1执行工作线程1,虚拟机VM2执行工作线程2,虚拟机VM3执行工作线程3…虚拟机VMN执行工作线程N,在工作线程之间没有时序关系的前提下,多个虚拟机可以同时工作,并行执行不同的工作线程,从而保证APP的算法任务的执行效率。在方框圈出的虚拟机执行工作线程的流程图中,虚拟机对应的工作线程设置有栈帧追踪器,以对工作线程的执行过程进行实时追踪。在工作线程执行过程中,栈帧不断更新切换,栈帧追踪器对虚拟机更新的栈帧追踪记录,虚拟机逐条执行该栈帧对应的指令程序,之后,判断是否所有栈帧执行完毕,如果是,则说明该工作线程可以结束,退出该虚拟机,如果还有未执行的栈帧,则返回继续更新切换栈帧,并重复栈帧的执行过程。

多个虚拟机执行各自工作线程的进度不一样,有的虚拟机在执行完自身对应的工作线程之后,其它虚拟机的工作线程可能还没执行完毕,或者有的虚拟机需要反复执行自身对应的工作线程。

在APP执行过程中,可能检测到进程异常。该进程异常可能是虚拟机本身的问题,也可能是虚拟机执行的工作线程时脚本错误,或者其它不需要虚拟机执行的工作线程出现的问题。而本申请说明书主要针对虚拟机执行的工作线程中脚本错误导致的异常定位,具体可以在进程崩溃异常时,根据回调给的线程报告,确定引发进程异常的工作线程的线程标识thread port,然后由于协议不同,需要将线程标识thread port转换为作为索引的线程标识pthread_t,根据该线程标识pthread_t可以判定引发进程异常的工作线程是否为虚拟机的工作线程。

如果引发进程异常的工作线程是虚拟机的工作线程,则基于pthread_t查找对该pthread_t对应的工作线程进行追踪记录的堆栈追踪器,这样,就可以从堆栈信息库中查找获取该堆栈追踪器记录的堆栈信息。进一步,根据获取到的堆栈信息中最新栈帧,进行堆栈回溯,定位出错误代码的代码名称、代码行以及指令内容,并写入预分配的存储节点,添加到异常日志中,该异常日志可以上传至云端或已位于云端,只是向异常日志中添加新的错误代码详情即可。这样,用户可以根据异常日志中代码详情,获悉出错代码所在行以及具体代码名称及指令内容,及时对问题进行修复。

如果引发进程异常的工作线程不是虚拟机的工作线程,例如UI工作线程等,则可以按照现有的异常修复方式进行处理。

应理解,本说明书实施例中,进程异常时可能是由于一个或多个工作线程出错导致的系统崩溃,因此,当在确定引发进程异常的虚拟机的工作线程不止一个时,可以按照工作线程的执行先后顺序,依次处理引发进程异常的多个虚拟机的工作线程。或者,也可以按照为工作线程赋予的优先级顺序,依次处理引发进程异常的多个虚拟机的工作线程。其中,工作线程的优先级按照工作线程的重要程度定义。

这样,在对引发进程异常的一个工作线程处理完成之后,可以继续处理下一个引发进程异常的工作线程,同时,非虚拟机执行的工作线程可以与虚拟机执行的工作线程并行处理,以便于对引发进程异常的问题进行快速及时的定位。

参照图4所示,为本说明书实施例提供的一种对错误代码进行定位的装置,该装置400可以集成或安装于包含多个虚拟机的终端,所述多个虚拟机支持并发执行,且每个虚拟机对应一个工作线程,每个工作线程配置有追踪组件,以对工作线程进行独立追踪记录。该装置400可以包括:

判断模块402,用于在检测到应用进程异常时,根据回调信息判断引发异常的工作线程是否为虚拟机的工作线程,其中,所述回调信息至少包含线程标识和线程状态;

查找模块404,用于在判断模块判断引发异常的工作线程是虚拟机的工作线程时,根据所述回调信息中的线程标识查找该虚拟机的工作线程对应的追踪组件;

获取模块406,用于基于查找到的追踪组件获取对所述虚拟机的工作线程进行追踪记录的堆栈信息,其中,不同虚拟机的工作线程被追踪组件追踪记录的堆栈信息之间相互隔离存储;

定位模块408,用于基于获取到的堆栈信息中最新栈帧定位错误代码。

可选地,作为一个实施例,定位模块408在基于获取到的堆栈信息中最新栈帧定位错误代码时,具体用于从获取到的堆栈信息中确定最新栈帧;基于所述最新栈帧进行堆栈回溯,确定错误代码的代码详情,所述代码详情包括代码名称、代码行以及指令内容。

在本说明书实施例的一种具体实现方式中,还包括:上报模块,用于在定位模块408基于获取到的堆栈信息中最新栈帧定位错误代码之后,将错误代码的代码详情写入预分配的信息存储空间,并添加至异常日志中进行异常上报。

在本说明书实施例的再一种具体实现方式中,所述工作线程是利用可移植操作系统接口线程专有的应用程序接口进行线程级别的信息存储;且当检测到应用进程异常时,与应用进程执行相关的工作线程均被挂起。

在本说明书实施例的再一种具体实现方式中,所述堆栈信息通过以下方式进行追踪记录:所述追踪组件对工作线程中执行的栈帧进行追踪,并在栈帧的执行入口进行记录。

在本说明书实施例的再一种具体实现方式中,所述追踪组件在对工作线程中执行的栈帧进行追踪时,具体用于捕获最新执行的栈帧,以使得捕捉过程满足线性时间复杂度。

在本说明书实施例的再一种具体实现方式中,所述追踪组件在栈帧的执行入口进行记录时,具体用于判断当前进程执行的栈帧是否发生变化;如果发生变化,则使用最新栈帧替换先前栈帧。

通过对能够支持并发执行的多个虚拟机对应的工作线程的执行过程进行追踪,并记录能够表示解释器运行状态的堆栈信息;在进程异常时,且判断该进程异常是由虚拟机的工作线程引发的情况下,基于回调信息中的线程标识查找对引发异常的工作线程进行追踪的追踪组件,进而获取该追踪组件记录的堆栈信息,并根据该堆栈信息中最新栈帧定位到错误代码,甚至还可以进行堆栈回溯,定位到错误代码的代码名称、代码行等代码详情。可见,由于通过对虚拟机的工作线程进行追踪,并记录堆栈信息,可以在进程异常时,利用追踪记录的堆栈信息及时精准定位到错误代码,甚至错误代码行等代码详情,提升了定位问题的精准度,方便对相关任务进行下线或改写进行止损,为问题修复提供了较好的引导参照。

图5是本说明书的一个实施例电子设备的结构示意图。请参考图5,在硬件层面,该电子设备包括处理器,可选地还包括内部总线、网络接口、存储器。其中,存储器可能包含内存,例如高速随机存取存储器(Random-Access Memory,RAM),也可能还包括非易失性存储器(non-volatile memory),例如至少1个磁盘存储器等。当然,该电子设备还可能包括其他业务所需要的硬件。

处理器、网络接口和存储器可以通过内部总线相互连接,该内部总线可以是ISA(Industry Standard Architecture,工业标准体系结构)总线、PCI(PeripheralComponent Interconnect,外设部件互连标准)总线或EISA(Extended Industry StandardArchitecture,扩展工业标准结构)总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图5中仅用一个双向箭头表示,但并不表示仅有一根总线或一种类型的总线。

存储器,用于存放程序。具体地,程序可以包括程序代码,所述程序代码包括计算机操作指令。存储器可以包括内存和非易失性存储器,并向处理器提供指令和数据。

处理器从非易失性存储器中读取对应的计算机程序到内存中然后运行,在逻辑层面上形成对错误代码进行定位的装置。处理器,执行存储器所存放的程序,并具体用于执行以下操作:

在检测到应用进程异常时,根据回调信息判断引发异常的工作线程是否为虚拟机的工作线程,其中,所述回调信息至少包含线程标识和线程状态;如果是虚拟机的工作线程,则根据所述回调信息中的线程标识查找该虚拟机的工作线程对应的追踪组件;基于查找到的追踪组件获取对所述虚拟机的工作线程进行追踪记录的堆栈信息,其中,不同虚拟机的工作线程被追踪组件追踪记录的堆栈信息之间相互隔离存储;基于获取到的堆栈信息中最新栈帧定位错误代码。

上述如本说明书图1所示实施例揭示的装置执行的方法可以应用于处理器中,或者由处理器实现。处理器可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、网络处理器(Network Processor,NP)等;还可以是数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本说明书一个或多个实施例中公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本说明书一个或多个实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器,处理器读取存储器中的信息,结合其硬件完成上述方法的步骤。

该电子设备还可执行图1的方法,并实现相应装置在图1所示实施例的功能,本说明书实施例在此不再赘述。

当然,除了软件实现方式之外,本说明书实施例的电子设备并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。

本说明书实施例还提出了一种计算机可读存储介质,该计算机可读存储介质存储一个或多个程序,该一个或多个程序包括指令,该指令当被包括多个应用程序的便携式电子设备执行时,能够使该便携式电子设备执行图1所示实施例的方法,并具体用于执行以下方法:

在检测到应用进程异常时,根据回调信息判断引发异常的工作线程是否为虚拟机的工作线程,其中,所述回调信息至少包含线程标识和线程状态;如果是虚拟机的工作线程,则根据所述回调信息中的线程标识查找该虚拟机的工作线程对应的追踪组件;基于查找到的追踪组件获取对所述虚拟机的工作线程进行追踪记录的堆栈信息,其中,不同虚拟机的工作线程被追踪组件追踪记录的堆栈信息之间相互隔离存储;基于获取到的堆栈信息中最新栈帧定位错误代码。

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

上述一个或多个实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。具体的,计算机例如可以为个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。

计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。

还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。

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

上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。

技术分类

06120115636078