用于Windows软件产品的dump文件自动分析统计方法及系统与流程

文档序号:12176854阅读:406来源:国知局
用于Windows软件产品的dump文件自动分析统计方法及系统与流程

本发明涉及Windows软件产品的错误分析领域,具体来讲是一种用于Windows软件产品的dump文件自动分析统计方法及系统。



背景技术:

现在很多软件产品,例如Windows系统的软件产品,为了提高用户口碑,追求产品的稳定性,希望在产品发生崩溃时记录下产品崩溃时的运行环境以及崩溃的原因,更希望能根据崩溃的原因按照崩溃次数进行排序,以方便产品开发人员及时定位到程序的bug(漏洞)及优先定位崩溃量比较大的bug,以提高代码的质量及产品的稳定性。

目前,在Windows系统中,通常采用获取用于记录错误信息的dump文件(一种转储文件,是Windows系统下在应用程序崩溃时,抓取应用程序崩溃时的运行环境及崩溃的原因,用于定位应用程序崩溃的原因),并将dump文件上传至Windows系统软件产品的服务器进行分析,来实现对产品的所有错误的收集和处理。

但在实际操作中,收集大量的dump文件后,需要人力分析dump文件,同时也需要人力对产品崩溃原因进行分类统计。而全由人工采用手动进行分析统计等,往往带有较大程度的主观性,使得分析、统计标准不统一;另外,在海量数据的场景下,dump文件信息数据往往维度多、数据量大,靠人工进行分析、统计往往不准确、覆盖率也不够高、重复性的工作也容易导致失误,而且人工操作时间较长,效率较低,人力成本较大。



技术实现要素:

本发明的目的是为了克服上述背景技术的不足,提供一种用于Windows软件产品的dump文件自动分析统计方法及系统,能对生成的dump文件进行自动分析和自动分类统计,不但准确、高效、及时性强,而且能极大的节省人力成本,满足使用需求。

为达到以上目的,本发明提供一种用于Windows软件产品的dump文件自动分析统计方法,包括以下步骤:步骤S1:在客户端的Windows软件产品中集成用于实现dump抓取功能的函数,转入步骤S2;步骤S2:当客户端的Windows软件产品的程序发生崩溃时,利用步骤S1中集成的函数,生成写有dump信息的dump文件,转入步骤S3;步骤S3:将生成的dump文件上传到服务器端,转入步骤S4;步骤S4:服务器端利用Windows提供的自动分析工具对上传的dump文件进行分析,提取出所述dump信息,并生成分析结果文件,该分析结果文件中包括函数调用链信息,转入步骤S5;步骤S5:服务器端对分析结果文件中的函数调用链信息进行分类统计,统计出计数最高的导致错误的起始调用函数;并根据所述起始调用函数定位出代码中的bug,结束。

本发明还提供一种用于Windows软件产品的dump文件自动分析统计系统,包括设置于客户端的函数集成模块、dump文件生成模块、dump文件上传模块;以及设置于服务器端的dump文件分析模块、分析结果统计模块;

所述函数集成模块用于:在Windows软件产品中集成用于实现dump抓取功能的函数;所述dump文件生成模块用于:当Windows软件产品的程序发生崩溃时,利用函数集成模块集成的函数,生成写有dump信息的dump文件;所述dump文件上传模块用于:将dump文件上传到服务器端;所述dump文件分析模块用于:利用Windows提供的自动分析工具对上传的dump文件进行分析,提取出dump信息,并生成分析结果文件,该分析结果文件中包括函数调用链信息;所述分析结果统计模块用于:对分析结果文件中的函数调用链信息进行分类统计,统计出计数最高的导致错误的起始调用函数;并根据所述起始调用函数定位出代码中的bug。

本发明的有益效果在于:

本发明提供了一种用于Windows软件产品的dump文件自动分析统计方法,能在客户端中集成用于实现dump抓取功能的函数;当客户端的Windows软件产品的程序发生崩溃时,利用集成的函数能生成写有dump信息的dump文件;将生成的dump文件上传到服务器端后,服务器端能利用Windows提供的自动分析工具对上传的dump文件进行分析,提取出所述dump信息,并生成分析结果文件;对分析结果文件中的函数调用链信息进行分类统计,统计出计数最高的导致错误的起始调用函数后,能根据该起始调用函数定位出代码中的bug。与现有技术相比,本发明能对生成的dump文件进行自动分析和自动分类统计,从而快速发现和定位错误,不但准确、高效、及时性强,而且能极大的节省人力成本,提高了软件产品质量,满足使用需求,用户体验佳。

附图说明

图1为本发明实施例中用于Windows软件产品的dump文件自动分析统计方法的流程图;

图2为本发明实施例中用于Windows软件产品的dump文件自动分析统计系统的结构框图。

具体实施方式

下面结合附图及具体实施例对本发明作进一步的详细描述。

参见图1所示,本发明实施例提供一种用于Windows软件产品的dump文件自动分析统计方法,包括以下步骤:

步骤S1:在客户端的Windows软件产品中集成用于实现dump抓取功能的函数,转入步骤S2。

可以理解的是,本实施例中,用于实现dump抓取功能的函数包括:异常处理设置函数SetUnhandledExceptionFilter、异常处理函数lpExceptionFunc、文件生成函数CreateFile和dump信息写入函数MiniDumpWriteDump。在此基础上,步骤S1具体包括以下流程:

步骤S101:将Windows系统API(Application Programming Interface,应用编程接口)函数中的异常处理设置函数SetUnhandledExceptionFilter集成到客户端的Windows软件产品的程序中;并将所述异常处理设置函数SetUnhandledExceptionFilter的调用参数设置为异常处理函数lpExceptionFunc,转入步骤S102。

通过此步骤的操作,可使客户端系统发生错误时,自动调用异常处理设置函数SetUnhandledExceptionFilter来设置异常处理函数lpExceptionFunc。该异常处理设置函数SetUnhandledExceptionFilter是在程序发生错误最后接管程序的地方,且其调用函数为异常处理函数lpExceptionFunc,所以,当错误发生时会去调用异常处理函数lpExceptionFunc,从而将执行流程转入到异常处理函数lpExceptionFunc中。具体的实现代码如下:

LPTOP_LEVEL_EXCEPTION_FILTER

SetUnhandledExceptionFilter(LPTOP_LEVEL_EXCEPTION_FILTER lpExceptionFunc);

步骤S102:在异常处理函数lpExceptionFunc中,创建一个用于生成dump文件的文件生成函数CreateFile,转入步骤S103。

具体来说,所述文件生成函数CreateFile包括以下内容:

HANDLE WINAPI CreateFile(

LPCTSTR lpFileName,

DWORD dwDesiredAccess,

DWORD dwShareMode,

LPSECURITY_ATTRIBUTES lpSecurityAttributes,

DWORD dwCreationDisposition,

DWORD dwFlagsAndAttributes,

HANDLE hTemplateFile

);

其中,参数lpFileName是最终保存在磁盘的dump的文件名;

参数dwDesiredAccess传入GENERIC_WRITE,表示写入文件;

参数dwShareMode传入0,表示独占的方式写入;

参数lpSecurityAttributes传入NULL,表示不考虑安全属性;

参数dwCreationDisposition传入CREATE_ALWAYS,表示总是创建;

参数dwFlagsAndAttributes传入FILE_ATTRIBUTE_NORMAL,表示为普通文件;

参数hTemplateFile传入空,表示不是复制文件句柄。

步骤S103:将Windows系统API函数中的dump信息写入函数MiniDumpWriteDump集成到当前Windows软件产品的程序中,该dump信息写入函数MiniDumpWriteDump用于向生成的dump文件中写入dump信息。

具体来说,所述dump信息写入函数MiniDumpWriteDump包括以下内容:

其中,参数hProcess传入当前进程的句柄;

参数ProcessId传入当前进程的id;

参数hFile传入上面调用CreateFile返回的文件句柄;

参数DumpType传入MiniDumpNormal,表示抓取的信息不包含整个内存信息;

参数ExceptionParam传入MINIDUMP_EXCEPTION_INFORMA TION的对象;

参数UserStreamParam传入NULL,表示为空;

参数CallbackParam传入NULL,表示为空。

步骤S2:当客户端的Windows软件产品的程序发生崩溃(或异常)时,利用步骤S1中集成的函数,生成写有dump信息的dump文件,转入步骤S3;其中,所述dump信息包括:程序出错的原因,出错的源代码的所在文件的行号,程序出错时的函数调用链信息,调用的函数名字和源代码文件名等。

实际操作时,步骤S2具体包括以下流程:

当客户端的Windows软件产品的程序发生崩溃时,Windows系统会调用异常处理设置函数SetUnhandledExceptionFilter设置的异常处理函数lpExceptionFunc;异常处理函数lpExceptionFunc会调用文件生成函数CreateFile创建一个dump文件;再通过调用dump信息写入函数MiniDumpWriteDump将所述dump信息写入dump文件中,从而生成写有dump信息的dump文件。

步骤S3:将生成的dump文件上传到服务器端,转入步骤S4。具体操作时,可使用网络套接字将生成的dump文件上传到服务器端。

步骤S4:服务器端利用Windows提供的自动分析工具对上传的dump文件进行分析,提取出所述dump信息,并生成分析结果文件,该分析结果文件中包括函数调用链信息且该文件格式为TXT文件,转入步骤S5。

本实施例中,服务器端利用的自动分析工具是Windows提供的cdb程序工具(即cdb.exe)。该cdb程序工具是Windows提供的一个用来分析dump文件的工具,通过命令行的方式来运行,通过命令行参数来指定cdb分析的文件,及分析的命令。

具体来说,命令.ecxr可以让cdb程序来读取dump文件中程序出错的原因;命令kb可以让cdb程序来读取dump文件中程序崩溃时的函数调用链信息。有了出错的原因可以马上知道程序为什么出错,有了函数调用链信息可以知道出错的位置是从应用程序的那个函数调用开始的。

实际操作时,cdb程序工具的调用方式如下:

cdb.exe-y SymbolPath-i ImagePath-z DumpFileName-logo ResultFileName".ecxr;kb;q"

其中,SymbolPath是应用程序编译时生成的PDB(Program Database File,程序数据库文件);Windows提供PDB文件是用来帮助软件的调试的,生成应用程序的时候就会自动生成;

ImagePath是应用程序EXE的路径;

DumpFileName是需要分析的dump文件名;

ResultFileName是分析结果的保存文件名;

".ecxr;kb;q"是cdb的命令,包括分析出错原因和调用链,以及退出程序。

通过调用上述命令等则可获取到相应的dump信息,从而生成分析结果文件。

步骤S5:服务器端对分析结果文件中的函数调用链信息进行分类统计,统计出计数最高的导致错误的起始调用函数;并根据该起始调用函数定位出代码中的bug,结束。

可以理解的是,本发明的函数调用链信息其实就是函数调用的层级信息,由于该层级信息可能有多数层级,因此,为了高效、准确的进行分类统计,本发明在对分析结果文件中的函数调用链信息进行分类统计时,是对指定的调用链层级数的内容进行分类统计的,若指定的调用链层级数大于实际的调用链层级数,则是对实际的调用链层级数的内容进行分类统计。例如,指定的调用链层级数为5层,而实际的函数调用链只有3层,则分类统计时只统计3层的内容。所述指定的调用链层级数是一个经验值,通常指定为5层~10层,具体数值可以依据各个软件具体情况而定。

进一步的,实际操作中,所述分析结果文件中还可以包含出错的原因信息,则步骤S5在对分析结果文件中的函数调用链信息进行分类统计时,可结合该出错的原因信息进行有效的分类统计,可帮助快速的定位bug。

本发明中,通过对函数调用链信息进行分类统计,找到起始调用函数并最终定位出bug的原理分析如下:

从步骤S4得到了分析结果文件后,该分析结果文件中会有发生错误时的函数调用链信息(就是函数调用的层级信息,可以知道从哪个起始函数调用出错的),通过对该函数调用链信息进行分类统计就可以获取到最终导致错误的起始调用函数(起始调用函数是指导致错误代码发生的最早的调用函数),通过该起始调用函数可以发现代码中的bug,因为出错时要么就是在底层函数出错,要么是在当前代码出错,如果是底层代码出错只有通过寻找最上层的调用函数才能找到bug,如果是在当前层出错则当前层就是调用函数,如果是同样的错误那么其调用链会是一样的,找到的调用函数也是会是一样的,所以本发明通过统计指定层级数的函数调用链,就能追寻到导致错误的起始调用函数,从而定位出bug。

下面举一例来对上述分类统计的实际过程进行详细说明。假设在分析在分析结果文件中,会有这样一行信息:

ChildEBP RetAddr Args to Child,则这行信息代表接下来是显示所有的调用链。其中,ChildEBP表示是CPU寄存器EBP(Extended Base Pointer,扩展基址指针寄存器)的值;RetAddr表示函数调用返回地址;Args to Child表示当前调用函数的参数;然后紧跟的是函数的具体名字。

假设一条调用链信息如下:

41b1fbb8 7762585e 02348f2c 00000001 3640fc8c douyuTool!TimerEx::TimerRoutine+0x73

e:\douyutool\timerex.cpp

其中,douyuTool!TimerEx::TimerRoutine则是具体的调用函数;

e:\douyutool\timerex.cpp对应的则是具体代码的源文件名字。

将douyuTool!TimerEx::TimerRoutine记录下来算做是一个调用函数,将多条调用函数的信息统计起来,如果一个分析结果文件中的统计的5层的调用链的函数是一样的,说明错误是一样的,对一样的进行计数,不一样的则分别计数,如果统计的计数最高的则说明发生此类错误是最多的,可以优先定位此类错误,解决发生bug最多的地方,提高软件质量。

参见图2所示,本发明实施例还提供一种用于Windows软件产品的dump文件自动分析统计系统,包括设置于客户端的函数集成模块、dump文件生成模块、dump文件上传模块;以及设置于服务器端的dump文件分析模块、分析结果统计模块。

其中,函数集成模块用于:在Windows软件产品中集成用于实现dump抓取功能的函数;其具体流程为:将Windows系统API函数中的异常处理设置函数集成到客户端的Windows软件产品的程序中,并将所述异常处理设置函数的调用参数设置为异常处理函数;在异常处理函数中,创建一个用于生成dump文件的文件生成函数;将Windows系统API函数中的dump信息写入函数集成到客户端的Windows软件产品的程序中。

dump文件生成模块用于:当Windows软件产品的程序发生崩溃时,利用函数集成模块集成的函数,生成写有dump信息的dump文件;其具体流程为:当Windows软件产品的程序发生崩溃时,调用所述异常处理设置函数设置的异常处理函数;所述异常处理函数会调用文件生成函数创建一个dump文件;再通过调用dump信息写入函数将dump信息写入dump文件中,生成写有dump信息的dump文件。

dump文件上传模块用于:使用网络套接字将dump文件上传到服务器端。

dump文件分析模块用于:利用Windows提供的自动分析工具对上传的dump文件进行分析,提取出dump信息,并生成分析结果文件,该分析结果文件中包括函数调用链信息;本实施例中,上述自动分析工具为Windows提供的cdb程序工具。

分析结果统计模块用于:对分析结果文件中的函数调用链信息进行分类统计,统计出计数最高的导致错误的起始调用函数;并根据所述起始调用函数定位出代码中的bug。本实施例中,分析结果统计模块对分析结果文件中的函数调用链信息进行分类统计时,是对指定的调用链层级数的内容进行分类统计;若指定的调用链层级数大于实际的调用链层级数,则是对实际的调用链层级数的内容进行分类统计。

需要说明的是:上述实施例提供的系统在进行操作时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将系统的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。

本发明不局限于上述实施方式,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围之内。

本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。

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