一种异常处理的方法、装置及电子设备与流程

文档序号:18213923发布日期:2019-07-19 22:30阅读:96来源:国知局
一种异常处理的方法、装置及电子设备与流程

本发明涉及电子技术领域,特别涉及一种异常处理的方法、装置及电子设备。



背景技术:

目前,对于windows客户端软件开发来说,没人能保证自己的软件在各种未知环境运行下,会没有任何问题,因此,对于windows系统,系统提供了相应的应用程序编程接口(applicationprogramminginterface,api)来对程序中出现的异常进行捕获,捕获异常后则可以调用系统的api函数来生成dump文件,其中dump文件则包含当期程序异常时的函数调用堆栈,客户端软件则将此dump文件上报到服务器。开发人员则主要通过windows提供的windbg工具来查看dump文件的异常原因,其中最主要则是查看函数调用堆栈,从而知道程序出错的源代码的位置,从而能够解决崩溃的问题。

然而对于一些异常情况,仅仅查看函数调用堆栈很难定位到程序出错的原因,通常可能是由于该函数传入的参数存在异常情况导致的,同时也需要知道当期函数运行时的环境信息。因此,需要一种方法可以更好的帮助开发人员定位应用程序崩溃的原因。



技术实现要素:

本发明实施例提供了一种异常处理的方法、装置及电子设备,以解决目前应用程序出现异常时,无法准确定位应用程序崩溃原因的问题。

第一方面,本申请提供了一种异常处理的方法,该方法包括:

在目标应用程序中定义全局变量,以存储所述目标应用程序的运行环境信息;

在所述目标应用程序中编写生成dump文件的功能函数;

在所述目标应用程序的exe模块中编写捕获异常的异常处理函数;

在所述目标应用程序的exe模块中注册所述异常处理函数;

当所述异常处理函数捕获到异常时,通过所述生成dump文件的功能函数生成dump文件,并将所述dump文件发送到服务器,其中,所述dump文件中包括所述全局变量的数据。

进一步的,在所述目标应用程序的exe模块中编写捕获异常的异常处理函数,包括:

在所述目标应用程序中定义一个异常处理函数,所述异常处理函数中定义了处理的异常类型信息,以及在捕获异常时调用所述生成dump文件的功能函数。

进一步的,当所述异常处理函数捕获到异常时,通过所述生成dump文件的功能函数生成dump文件,包括:

当所述异常处理函数捕获到异常时,在所述目标应用程序中编写调用系统提供的功能函数createfile的模块,以创建一个dump文件;

在所述目标应用程序中编写调用系统函数minidumpwritedump的模块,以将生成的dump信息写入到dump文件;

在所述dump文件尾部写入所述全局变量的数据。

进一步的,所述dump文件中还包括所述目标应用程序运行过程中生成的错误日志信息;

当所述异常处理函数捕获到异常时,通过所述生成dump文件的功能函数生成dump文件,还包括:

将所述目标应用程序运行过程中生成的错误日志文件合并写入到所述dump文件中。

进一步的,所述在所述dump文件尾部写入所述全局变量的数据,包括:

调用系统文件写入函数writefile将所述全局变量的数据写入到所述dump文件中。

第二方面,本申请提供一种异常处理的装置,该装置包括:

定义模块,用于在目标应用程序中定义全局变量,以存储所述目标应用程序的运行环境信息;

第一编写模块,用于在所述目标应用程序中编写生成dump文件的功能函数;

第二编写模块,用于在所述目标应用程序的exe模块中编写捕获异常的异常处理函数;

注册模块,用于在所述目标应用程序的exe模块中注册所述异常处理函数;

异常处理模块,用于当所述异常处理函数捕获到异常时,通过所述生成dump文件的功能函数生成dump文件,并将所述dump文件发送到服务器,其中,所述dump文件中包括所述全局变量的数据。

进一步的,所述第二编写模块具体用于:

在所述目标应用程序中定义一个异常处理函数,所述异常处理函数中定义了处理的异常类型信息,以及在捕获异常时调用所述生成dump文件的功能函数。

进一步的,所述异常处理模块具体用于:

当所述异常处理函数捕获到异常时,在所述目标应用程序中编写调用系统提供的功能函数createfile的模块,以创建一个dump文件;

在所述目标应用程序中编写调用系统函数minidumpwritedump的模块,以将生成的dump信息写入到dump文件;

在所述dump文件尾部写入所述全局变量的数据。

进一步的,所述dump文件中还包括所述目标应用程序运行过程中生成的错误日志信息;

所述异常处理模块具体还用于:

将所述目标应用程序运行过程中生成的错误日志文件合并写入到所述dump文件中。

进一步的,所述异常处理模块具体用于:

调用系统文件写入函数writefile将所述全局变量的数据写入到所述dump文件中。

第三方面,本发明还提供一种电子设备,包括:存储器,处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其中,所述处理器执行所述计算机程序时可以实现第一方面中任一所述的方法。

第四方面,本发明还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现第一方面中任一所述的方法。

本发明实施例通过在目标应用程序中定义全局变量,以存储目标应用程序的运行环境信息;在目标应用程序中编写生成dump文件的功能函数;在目标应用程序的exe模块中编写捕获异常的异常处理函数;在目标应用程序的exe模块中注册异常处理函数;当异常处理函数捕获到异常时,通过生成dump文件的功能函数生成dump文件,并将dump文件发送到服务器。本发明实施例中由于在目标应用程序中定义了全局变量,使得在发生异常时生成的dump文件中包括全局变量的数据,使得开发人员可以从dump文件获取额外的全局变量信息协助分析崩溃产生的原因,极大的帮助了开发人员定位问题,提高了分析异常的效率。

附图说明

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

图1是本发明实施例中异常处理的方法的一个实施例示意图;

图2是图1所示实施例中步骤s105的一个实施例示意图;

图3是图1所示实施例中步骤s105的另一个实施例示意图;

图4是本发明实施例中异常处理的装置的一个实施例示意图;

图5是本发明实施例中电子设备的一个实施例示意图。

本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。

具体实施方式

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

本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。

本发明实施例中异常处理的方法应用于异常处理的装置,该装置位于电子设备中,本实施例中该电子设备系统为windows系统,该电子设备可以是手机、平板电脑或者个人电脑等windows系统电子设备,也可以是未来新出现的windows系统的电子设备等。

异常(exception)是应用程序在运行时可能出现的会导致程序运行终止的错误。由于程序设计的要求之一就是程序的健壮性,希望程序在运行时能够不出或者少出问题。但是,在程序的实际运行时,总会有一些因素导致程序不能正常运行。在设计算法时,往往对算法的正常逻辑处理流程设计得比较准确,对异常情况的处理反而不容易设计全面,导致程序在出现异常情况时崩溃,如果软件出现这种情况会给用户带来极不友好的体验。目前异常被捕获后生成dump文件的信息有限,无法准确定位应用程序崩溃原因的问题。因此,本发明实施例提供了一种异常处理的方法、装置及电子设备,以解决该问题。

请参阅图1,本发明实施例中异常处理的方法的一个实施例包括:

s101、在目标应用程序中定义全局变量,以存储目标应用程序的运行环境信息;

本发明实施例中目标应用程序为windows应用程序。需要说明的是,本发明实施例中应用程序可以是移动终端(如手机、平板灯)上的应用程序(app)或终端(如个人电脑)上的计算机程序,即可以是移动终端上的windowsphone应用或者计算机上的windows应用程序。

本实施例中,存储在全局变量的数据为目标应用程序的运行环境信息,例如对于直播客户端软件来说,则可以包括当期是否有使用摄像头,当期直播的是否是播放电影,或者当期直播的是游戏直播,直播的游戏名称,当期直播的时长,客户端软件启动的时间等信息。进一步的,本发明实施例中海尔可以在目标应用程序中设置定时器,每隔一段时间主动的去更新目标应用程序的运行环境信息,从而保障当期全局变量存储的信息是最新的。

s102、在目标应用程序中编写生成dump文件的功能函数;

本实施例中,在目标应用程序中编写一个生成dump文件的功能,从而在异常产生时能够生成一个dump文件。

s103、在目标应用程序的exe模块中编写捕获异常的异常处理函数;

对于windows应用程序开发,会拆分成多个模块来完成,例如exe模块和dll模块,一个模块则是一个文件,例如,一个exe模块为一个exe文件,一个dll模块为一个dll文件,这样既有利于代码共享和分工,又可以将功能尽可能的拆分,减少代码耦合度。因此,一个windows应用程序的组成则由一个exe文件和多个dll文件组成。

本实施例中,为了让目标应用程序后续能正常使用,则需要首先捕获该异常,因此本实施例中则需要编写一个捕获异常的异常处理函数,用于处理产生异常时对异常的处理,使得应用程序可以继续执行。

s104、在目标应用程序的exe模块中注册异常处理函数;

具体的,由于windows系统中的应用程序均需要注册后才能正常使用,因此本实施例中,还需要注册上述编写的异常处理函数,当产生异常时,编写的异常处理函数的对应逻辑才会被执行。

s105、当异常处理函数捕获到异常时,通过生成dump文件的功能函数生成dump文件,并将dump文件发送到服务器。

其中,该dump文件中包括步骤s101中描述的全局变量的数据。本实施例中dump文件发送到服务器,以便开发工程师在服务器下载获取dump文件进行分析。

本发明实施例通过在目标应用程序中定义全局变量,以存储目标应用程序的运行环境信息;在目标应用程序中编写生成dump文件的功能函数;在目标应用程序的exe模块中编写捕获异常的异常处理函数;在目标应用程序的exe模块中注册异常处理函数;当异常处理函数捕获到异常时,通过生成dump文件的功能函数生成dump文件,并将dump文件发送到服务器。本发明实施例中由于在目标应用程序中定义了全局变量,使得在发生异常时生成的dump文件中包括全局变量的数据,使得开发人员可以从dump文件获取额外的全局变量信息协助分析崩溃产生的原因,极大的帮助了开发人员定位问题,提高了分析异常的效率。

在本发明一些实施例中,上述步骤s103可以进一步的包括:

在目标应用程序中定义一个异常处理函数,该异常处理函数中定义了处理的异常类型信息,以及在捕获异常时调用生成dump文件的功能函数。

具体实现如下:

long__stdcallmyunhandledexceptionfilter(pexception_pointerspexceptioninfo){

{

createminidump(pexceptioninfo,"core.dmp");

returnexception_continue_execution;

}

其中,定义一个异常处理函数,函数名称是myunhandledexceptionfilter,参数pexceptioninfo则会传递一些异常相关的信息,包括此时是什么异常,如除0异常、无效句柄异常、内存访问异常等。另外,createminidump是上述步骤中编写的产生dump文件的功能函数;参数pexceptioninfo是系统的产生异常时的环境信息;参数"core.dmp"则是需要生成的dump文件的名称,其中,.dmp为dump文件的格式。

通过这个步骤就实现了在目标应用程序的exe模块中编写一个捕获异常的异常处理函数。

由于windows系统中提供了相应的api函数来注册异常处理函数,因此可以根据该提供的api函数来注册异常处理函数,上述步骤s104中在目标应用程序的exe模块中注册异常处理函数具体实现方式可以如下:

setunhandledexceptionfilter(myunhandledexceptionfilter);

其中,系统api函数setunhandledexceptionfilter则是用来注册一个异常处理函数;参数myunhandledexceptionfilter则是上述步骤中编写的异常处理函数。因此只有在系统中注册异常处理函数,当应用程序执行时,产生了异常,则系统会去执行注册的异常处理函数myunhandledexceptionfilter。在此函数中则会对异常进行处理。通过这个步骤就实现了在该在目标应用程序的exe模块中注册异常处理函数。

如图2所示,在本发明一些实施例中,上述步骤s105中当所述异常处理函数捕获到异常时,通过生成dump文件的功能函数生成dump文件,进一步可以包括:

s1051、当异常处理函数捕获到异常时,在目标应用程序中编写调用系统提供的功能函数createfile的模块,以创建一个dump文件;

该具体实现方式如下:

首先在目标应用程序中编写一个接口用于生成dump文件,具体如下:

voidcreateminidump(pexception_pointerspep,lpctstrstrfilename)

由于dump是一个文件,所以本实施例中还需要创建一个dump文件,以供写入生成的dump信息。具体则调用系统提供的功能函数createfile来创建一个文件,具体实现如下:

handlehfile=createfile(strfilename,generic_read|generic_write,file_share_write,null,create_always,file_attribute_normal,null);

其中,参数strfilename则标示创建的文件的名称。

s1052、在目标应用程序中编写调用系统函数minidumpwritedump的模块,以将生成的dump信息写入到dump文件;

本实施例中,在目标应用程序中通过调用系统函数minidumpwritedump来将生成的dump信息写入到dump文件中,具体实现方式如下:

minidumpwritedump(getcurrentprocess(),getcurrentprocessid(),hfile,minidumpnormal,null,null,null);

其中,系统函数minidumpwritedump则可以生成当前的dump信息;参数1则是当前进程的句柄,通过调用系统函数getcurrentprocess来获取;参数2则是当前的进程的id,则是通过调用系统函数getcurrentprocessid来获取;参数3hfile则是需要写入文件的句柄,则是之前预先创建的文件句柄;参数4则是传入需要生成的是minidumpnormal,而不是全量dump。

最后再关闭文件句柄closehandle(hfile),调用系统函数closehandle,从而dump文件即生成了。

s1053、在dump文件尾部写入全局变量的数据。

当dump文件生成后,本实施例中会在dump文件尾部写入定义的全局变量的数据,从而会随着dump文件发送到服务器时,携带上这些全局变量信息以帮助开发人员定位问题。

具体则是通过调用系统文件写入函数writefile将全局变量的数据写入到所述dump文件中,具体实现方式如下:

writefile(hfile,全局变量,全局变量大小,实际写入的数据大小,null);

从而实现将全局变量的数据写入到了dump文件中。

本发明实施例中为了进一步再dump文件中写入更多信息,以便开发人员进行分析,还可以在程序产生崩溃时,将日志文件的错误级别的日志内容写入到dump文件尾部,从而有了错误日志则可以极大的帮助开发人员定位问题。因此,本发明实施例中在目标应用程序中的异常处理函数捕获到异常时,通过生成dump文件的功能函数生成的dump文件中还包括所述目标应用程序运行过程中生成的错误日志信息;此时,如图3所示,上述步骤s105中当所述异常处理函数捕获到异常时,通过所述生成dump文件的功能函数生成dump文件,还可以包括:

s1054、将目标应用程序运行过程中生成的错误日志文件合并写入到dump文件中。

具体的,则是通过调用文件写入函数来将全局变量写入到dump文件中。首先则是通过文件读取读取错误日志的文件内容,然后将其写入到dump文件尾部,具体实现方式如下:

writefile(hfile,日志文件内容,日志文件大小,实际写入的数据大小,null);

从而实现将错误日志写入到了dump文件中。

最后再关闭文件句柄closehandle(hfile);调用系统函数closehandle。从而dump文件则生成了。

下面介绍本发明实施例中异常处理的装置的实施例。

请参阅图4,为本发明实施例中提供的异常处理的装置的一个实施例,该装置包括:

定义模块401,用于在目标应用程序中定义全局变量,以存储所述目标应用程序的运行环境信息;

第一编写模块402,用于在所述目标应用程序中编写生成dump文件的功能函数;

第二编写模块403,用于在所述目标应用程序的exe模块中编写捕获异常的异常处理函数;

注册模块404,用于在所述目标应用程序的exe模块中注册所述异常处理函数;

异常处理模块405,用于当所述异常处理函数捕获到异常时,通过所述生成dump文件的功能函数生成dump文件,并将所述dump文件发送到服务器,其中,所述dump文件中包括所述全局变量的数据。

进一步的,所述第二编写模块403具体用于:

在所述目标应用程序中定义一个异常处理函数,所述异常处理函数中定义了处理的异常类型信息,以及在捕获异常时调用所述生成dump文件的功能函数。

进一步的,所述异常处理模块405具体用于:

当所述异常处理函数捕获到异常时,在所述目标应用程序中编写调用系统提供的功能函数createfile的模块,以创建一个dump文件;

在所述目标应用程序中编写调用系统函数minidumpwritedump的模块,以将生成的dump信息写入到dump文件;

在所述dump文件尾部写入所述全局变量的数据。

进一步的,所述dump文件中还包括所述目标应用程序运行过程中生成的错误日志信息;

所述异常处理模块405具体还用于:

将所述目标应用程序运行过程中生成的错误日志文件合并写入到所述dump文件中。

进一步的,所述异常处理模块405具体用于:

调用系统文件写入函数writefile将所述全局变量的数据写入到所述dump文件中。

本发明实施例中还提供一种电子设备,请参见图5,所述电子设备包括:

存储器501,处理器502及存储在所述存储器上并可在所述处理器上运行的计算机程序503,其中,所述处理器502执行所述计算机程序503时可以实现上述异常处理的方法。该计算机程序503中包括上述实施例中描述的目标应用程序。

为了便于说明,仅示出了与本发明实施例相关的部分,具体技术细节未揭示的,请参照本发明实施例方法部分。存储器501可用于存储计算机程序503,上述计算机程序包括软件程序、模块和数据,处理器502通过运行执行存储在存储器501的计算机程序503,从而执行电子设备的各种功能应用以及数据处理。

在具体的实施过程中,存储器501可用于存储软件程序以及模块,处理器502通过运行存储在存储器501的软件程序以及模块,从而执行电子设备的各种功能应用以及数据处理。存储器501可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(例如游戏类应用程序、聊天类应用程序)等;存储数据区可存储根据电子设备的使用所创建的数据(游戏配置数据、音频数据)等。此外,存储器501可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。处理器502是电子设备的控制中心,利用各种接口和线路连接整个电子设备的各个部分,通过运行或执行存储在存储器501内的软件程序和/或模块,以及调用存储在存储器501内的数据,执行电子设备的各种功能和处理数据,从而对电子设备进行整体监控。可选的,处理器502可包括一个或多个处理单元;优选的,处理器502可集成应用处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等。

本发明实施例还提供一种计算机可读存储介质,其中,该计算机可读存储介质可存储有程序,该程序执行时包括上述方法实施例中记载的异常处理的方法的部分或全部步骤。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1