首页 专利交易 科技果 科技人才 科技服务 国际服务 商标交易 会员权益 IP管家助手 需求市场 关于龙图腾
 /  免费注册
到顶部 到底部
清空 搜索

一种抓取Dump文件的方法、装置和设备 

买专利卖专利找龙图腾,真高效! 查专利查商标用IPTOP,全免费!专利年费监控用IP管家,真方便!

申请/专利权人:武汉斗鱼网络科技有限公司

摘要:本发明提供了一种抓取Dump文件的方法、装置和设备,所述方法包括:S1,当预先创建的监控进程接收到待监控程序的异常崩溃信号时,在监控进程中创建Dump文件;S2,在监控进程中根据待监控程序ID,读取待监控程序的崩溃数据,并通过预先定义的处理函数将崩溃数据保存至内存;S3,在监控进程中通过调用与Dump文件对应的写入函数,将所述崩溃数据写入Dump文件中。本发明通过预先创建的监控进程,抓取待监控程序的崩溃现场,生成Dump文件,避免了待监控程序中的进程内抓取,提高了Dump文件的完整性和正确性。

主权项:1.一种抓取Dump文件的方法,其特征在于,包括:S1,当预先创建的监控进程接收到待监控程序的异常崩溃信号时,在监控进程中创建Dump文件;S2,在监控进程中根据待监控程序ID,读取待监控程序的崩溃数据,并通过预先定义的处理函数将崩溃数据保存至内存;S3,在监控进程中通过调用与Dump文件对应的写入函数,将所述崩溃数据写入Dump文件中;步骤S3前还包括:获取系统中所述写入函数所在的DLL模块;从所述DLL模块中获取所述写入函数的指针地址,所述指针地址指向内存中保存的崩溃数据,所述写入函数用于将保存在内存中的崩溃数据写入Dump文件中。

全文数据:一种抓取Dump文件的方法、装置和设备技术领域[0001]本发明涉及计算机技术领域,具体涉及一种抓取Dump文件的方法、装置和设备。背景技术[0002]Dump文件主要用于诊断一个进程的运行状态,在程序运行过程中遇到异常崩溃问题时,记录系统信息和程序运行堆栈信息,用于程序员后续分析调试程序崩溃原因的文件。[0003]现有技术中,抓取Dump文件的方法是采用的进程内抓取,但是有如下缺点:进程发生异常崩溃时,进程是处于不稳定的状态,如果此时在进程内抓取Dump文件可能会破坏崩溃现场,导致抓取Dump的结果不正确;有些进程不支持进程内抓取Dump操作,比如渲染进程,因为它没有访问文件系统的权限,所以无法生成Dump文件。发明内容[0004]针对现有技术中存在的上述缺陷,本发明提供一种抓取Dump文件的方法、装置和设备。[0005]本发明的一方面提供一种抓取Dump文件的方法,包括:S1,当预先创建的监控进程接收到待监控程序的异常崩溃信号时,在监控进程中创建Dump文件;S2,在监控进程中根据待监控程序ID,读取待监控程序的崩溃数据,并通过预先定义的处理函数将崩溃数据保存至内存;S3,在监控进程中通过调用与Dump文件对应的写入函数,将所述崩溃数据写入Dump文件中。[0006]其中,所述步骤S2前还包括:定义所述处理函数,其中,所述处理函数的参数为指针地址,所述指针地址指向崩溃数据,所述处理函数用于将输入的崩溃数据保存至内存中。[0007]其中,所述定义所述处理函数的步骤后还包括:获取待监控程序ID;将处理函数的指针地址和待监控程序ID注册至所述监控进程。[0008]其中,所述步骤S2具体包括:S21,在监控进程中根据待监控程序ID,读取与所述待监控程序ID对应的崩溃数据;S22,在监控进程中调用所述处理函数,将所述崩溃数据保存至内存。[0009]其中,所述步骤S3前还包括:获取系统中所述写入函数所在的DLL模块;从所述DLL模块中获取所述写入函数的指针地址,所述指针地址指向内存中保存的崩溃数据,所述写入函数用于将保存在内存中的崩溃数据写入Dump文件中。[0010]其中,所述步骤S1前还包括:注册所述监控进程的信息;检测到待监控程序发生异常崩溃状况后,根据监控进程的信息,向监控进程发送待监控程序的异常崩溃信号。[0011]本发明的另一方面提供一种抓取Dump文件的装置,包括:创建模块,用于当预先创建的监控进程接收到待监控程序的异常崩溃信号时,在监控进程中创建Dump文件;保存模块,用于在监控进程中根据待监控程序ID,读取待监控程序的崩溃数据,并通过预先定义的处理函数将崩溃数据保存至内存;写入模块,用于在监控进程中通过调用与Du即文件对应的写入函数,将所述崩溃数据写入Dump文件中。[0012]所述装置还包括:定义模块,用于定义所述处理函数,其中,所述处理函数的参数为指针地址,所述指针地址指向崩溃数据,所述处理函数用于将输入的崩溃数据保存至内存中。[0013]本发明的又一方面提供一种抓取Dump文件的设备,包括:至少一个处理器;以及与所述处理器通信连接的至少一个存储器,其中:所述存储器存储有可被所述处理器执行的程序指令,所述处理器调用所述程序指令能够执行本发明上述方面提供的抓取Dump文件的方法,例如包括:S1,当预先创建的监控进程接收到待监控程序的异常崩溃信号时,在监控进程中创建Dump文件;S2,在监控进程中根据待监控程序ID,读取待监控程序的崩溃数据,并通过预先定义的处理函数将崩溃数据保存至内存;S3,在监控进程中通过调用与Dump文件对应的写入函数,将所述崩溃数据写入Dump文件中。[0014]本发明的又一方面提供一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行本发明上述方面提供的抓取Dump文件的方法,例如包括:S1,当预先创建的监控进程接收到待监控程序的异常崩溃信号时,在监控进程中创建Dump文件;S2,在监控进程中根据待监控程序ID,读取待监控程序的崩溃数据,并通过预先定义的处理函数将崩溃数据保存至内存;S3,在监控进程中通过调用与Dump文件对应的写入函数,将所述崩溃数据写入Dump文件中。[0015]本发明提供的抓取Dump文件的方法、装置和设备,通过预先创建的监控进程,抓取待监控程序的崩溃现场,生成Dump文件,避免了待监控程序中的进程内抓取,提高了Dump文件的完整性和正确性。附图说明[0016]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。[0017]图1为本发明实施例提供的抓取Dump文件的方法的流程示意图;[0018]图2为本发明实施例提供的抓取Dump文件的装置的结构示意图;[0019]图3为本发明实施例提供的抓取Dump文件的设备的结构示意图。具体实施方式[0020]为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。[0021]图1为本发明实施例提供的抓取Dump文件的方法的流程示意图,如图1所示,包括:S1,当预先创建的监控进程接收到待监控程序的异常崩溃信号时,在监控进程中创建Dump文件;S2,在监控进程中根据待监控程序ID,读取待监控程序的崩溃数据,并通过预先定义的处理函数将崩溃数据保存至内存;S3,在监控进程中通过调用与Dump文件对应的写入函数,将所述崩溃数据写入DumP文件中。[0022]其中,进程Process是计算机中的程序关于数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础;在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器;程序是指令、数据及其组织形式的描述,进程是程序的实体;在本发明实施例中,监控进程为预先创建的后台进程或称为服务器进程),用于监控抓取待监控程序的崩溃现场,并生成Dump文件。[0023]其中,崩溃数据是待监控程序发生异常崩溃时,崩溃现场产生的数据。[0024]在步骤S1中,创建监控进程后,该监控进程用于对待监控程序的异常崩溃情况进行监控;待监控程序崩溃后,会立刻向监控进程发送异常崩溃信号,并在发送信号后,在监控进程中创建或生成Dump本地文件。[0025]在步骤S2中,在监控进程中根据预先获取到的待监控程序ID,获取到对应的崩溃数据,并将崩溃数据存储至内存buffer中。[0026]在步骤S3中,在监控进程中利用预先获取到的写入函数写入函数是针对Dump文件的),将步骤S2中保存至内存中的崩溃数据写入至步骤S1中创建的Dump文件中。[0027]本发明实施例提供的抓取Dump文件的方法,通过预先创建的监控进程,抓取待监控程序的崩溃现场,生成Dump文件,避免了待监控程序中的进程内抓取,提高了Dump文件的完整性和正确性。[0028]在上述任一实施例的基础上,所述步骤S2前还包括:定义所述处理函数,其中,所述处理函数的参数为指针地址,所述指针地址指向崩溃数据,所述处理函数用于将输入的崩溃数据保存至内存中。[0029]具体地,指针地址能够获取到待监控程序异常崩溃时产生的崩溃数据;而处理函数的作用是通过指针获取崩溃数据,做自定义的特殊处理,例如本发明实施例中的将崩溃数据保存至内存中的处理。[0030]在上述任一实施例的基础上,所述定义所述处理函数的步骤后还包括:获取待监控程序ID;将处理函数的指针地址和待监控程序ID注册至所述监控进程。[0031]具体地,由于监控进程需要对待监控程序进行监控,获取其崩溃数据,因此需要通过注册将待监控程序的相关信息包括指针地址和待监控程序ID注册或发送至监控进程,使得监控进程可以时刻监控待监控程序的异常崩溃处理过程,从待监控程序中读取Dump数据(即崩溃数据),并写入到完整的Dump文件中;应当说明的是,监控进程可以同时监控多个待监控程序,并将各待监控程序的崩溃数据写入一个Dump文件或写入每个待监控程序分别对应的Dump文件。[0032]在上述任一实施例的基础上,所述步骤S2具体包括:S21,在监控进程中根据待监控程序ID,读取与所述待监控程序ID对应的崩溃数据;S22,在监控进程中调用所述处理函数,将所述崩溃数据保存至内存。[0033]具体地,基于待监控程序ID,能够获取到对应的该程序产生的崩溃数据;而基于处理函数,函数的指针指向待监控程序产生的崩溃数据,处理函数能够将输入的崩溃数据保存至内存。[0034]在上述任一实施例的基础上,所述步骤S3前还包括:获取系统中所述写入函数所在的DLL模块;从所述DLL模块中获取所述写入函数的指针地址,所述指针地址指向内存中保存的崩溃数据,所述写入函数用于将保存在内存中的崩溃数据写入Dump文件中。[0035]其中,DLLDynamicLinkLibrary文件为动态链接库文件,又称“应用程序拓展”,是软件文件类型;在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,即DLL文件,放置于系统中;当我们执行某一个程序时,相应的DLL文件就会被调用;一个应用程序可使用多个DLL文件,一个DLL文件也可能被不同的应用程序使用。[0036]具体地,由于系统(例如windows系统没有开放写入函数的相关API,因此需要通过加载DLL手动获取windowsdll中的API接口;即获取写入函数所在的DLL模块,再从该DLL模块中获取写入函数的指针地址;使得监控进程能够调用写入函数来将崩溃输入写入到Dump文件中。[0037]在上述任一实施例的基础上,所述步骤S1前还包括:注册所述监控进程的信息;检测到待监控程序发生异常崩溃状况后,根据监控进程的信息,向监控进程发送待监控程序的异常崩溃信号。[0038]具体地,在创建监控进程后,需要向系统进行注册,使得在监控到待监控程序崩溃后,能够发送异常崩溃信息至监控进程,从而由创建的监控进程处理,避免系统自身处理。[0039]为了对本发明实施例提供的上述方法进行说明,以下提供另一实施例进行举例:[0040]本实施例是利用在待监控程序启动时,通过创建一个后台进程也可以称为服务器进程或监控进程),用于监控、抓取待监控程序的崩溃现场,并生成Dump文件;具体利用了与后台进程的通信机制、远程访问写入进程内存地址等方式来实现进程外抓取Dump;[0041]为了表达清晰,以下将用于监控程序异常崩溃的后台进程或监控进程称为服务器,待监控程序称为客户端,具体的实施步骤如下:[0042]步骤1,staticLONGWINAPIHandleExceptionEXCEPTION_POINTERS*exinfo,即首先定义异常崩溃的处理函数指针地址,用于接收windows系统监控到程序异常崩溃时的回调使用;[0043]步骤2,调用GetCurrentProcessId函数,获取客户端程序的进程ID待监控程序ID,用于服务器进程监控客户端程序使用;[0044]步骤3,待监控程序启动时,创建CrashClient对象,该对象主要包括以下作用,[0045]1调用ConnectServer函数,与后台进程建立通信连接;[0046]2调用Register函数,把步骤1定义的函数指针地址和步骤2得到的客户端进程ID注册到服务器进程中,用于服务器抓取Dump时使用;[0047]3调用SetUnhandledExceptionFilter向windows系统注册用于接收异常崩溃处理的过程即监控进程),是为了避免windows系统自身处理崩溃现场,交给创建的监控程序来处理;[0048]4通过上述接口,主要作用是把客户端程序相关的信息注册到后台服务器进程中,使得服务器进程可以时刻监控客户端程序的异常崩溃处理过程,从而从客户端进程中读取Dump数据,并写入到完整的Dump文件;[0049]步骤4,创建CrashServer对象,负责创建及启动后台服务器进程,并监控客户端程序的异常崩溃处理过程;该对象主要包括以下作用,[0050]1调用CreateNamedPipe创建命名管道服务器,用于与客户端进程进行连接通信;采用命名管道通信传输速度快,为抓取Dump文件提供了稳定的通信基础;[0051]2调用HandleConnectionRequest检测客户端的连接状态,当有客户端连接上,接收客户端在步骤3注册时发送的函数指针地址和进程ID;[0052]3调用RegisterWaitForSingleObject监控客户端的异常崩溃状态,如果出现崩溃问题,windows系统会马上通知到服务器进程做处理;[0053]4在收到客户端程序异常崩溃的信号时,具体的处理包括以下步骤,[0054]1调用GenerateFullDumpFile生成Dump本地文件;[0055]2调用LoadLibrary〃dbghelp.dll〃加载系统底层模块,由于windows系统没有开放相关API,所以这里通过加载DLL手动获取windowsdll中的API接口;[0056]3调用GetProcAddressmodule'MiniDumpWriteDump"获取windows系统底层提供的Dump文件写入函数的指针地址;[0057]⑷通过客户端连接时注册的进程ID和函数指针地址,调用ReadProcessMemory读取客户端进程异常崩溃的现场数据内存,保存在内存buffer中;[0058]5利用上述步骤(3中获取到的MiniDumpWriteDump函数指针地址,然后调用此函数指针把上述步骤⑷得到的客户端崩溃数据写入到上述步骤1创建的本地Dump文件。[0059]基于上述步骤,可实现后台服务器进程时刻监控客户端的异常崩溃过程,达到在进程外抓取并生成客户端程序Dump文件的目的,提高了抓取Dump文件的准确性、可靠性,还可以同时监控抓取多个客户端程序的异常崩溃过程。[0060]图2为本发明实施例提供的抓取Dump文件的装置的结构示意图,如图2所示,包括:创建模块201,用于当预先创建的监控进程接收到待监控程序的异常崩溃信号时,在监控进程中创建Dump文件;保存模块2〇2,用于在监控进程中根据待监控程序ID,读取待监控程序的崩溃数据,并通过预先定义的处理函数将崩溃数据保存至内存;写入模块2〇3,用于在监控进程中通过调用与Dump文件对应的写入函数,将所述崩溃数据写入Dump文件中。[0061]其中,创建监控进程后,该监控进程用于对待监控程序的异常崩溃情况进行监控;待监控程序崩溃后,监控进程会立刻接收到创建模块2〇1发送的异常崩溃信号,并在发出信号后,在监控进程中创建或生成Dump本地文件。[0062]其中,保存模块202在监控进程中根据预先获取到的待监控程序ID,获取到对应的崩溃数据,并将崩溃数据存储至内存buffer中。[0063]其中,写入模块203在监控进程中利用预先获取到的写入函数(写入函数是针对Dump文件的),将保存模块2〇2中保存至内存中的崩溃数据写入至创建模块2〇1中创建的Dump文件中。[0064]本发明实施例提供的抓取Dump文件的装置,通过预先创建的监控进程,抓取待监控程序的崩溃现场,生成Dump文件,避免了待监控程序中的进程内抓取,提高了Dump文件的完整性和正确性。[0065]在上述任一实施例的基础上,所述装置还包括:定义模块,用于定义所述处理函数,其中,所述处理函数的参数为指针地址,所述指针地址指向崩溃数据,所述处理函数用于将输入的崩溃数据保存至内存中。[0066]具体地,指针地址能够获取到待监控程序异常崩溃时产生的崩溃数据;而处理函数的作用是通过指针获取崩溃数据,做自定义的特殊处理,例如本发明实施例中的将崩溃数据保存至内存中的处理。[0067]在上述任一实施例的基础上,所述装置还包括:第一注册模块,用于获取待监控程序ID;将处理函数的指针地址和待监控程序ID注册至所述监控进程。[0068]在上述任一实施例的基础上,所述保存模块具体包括:读取单元,用于在监控进程中根据待监控程序ID,读取与所述待监控程序ID对应的崩溃数据;保存单元,用于在监控进程中调用所述处理函数,将所述崩溃数据保存至内存。[0069]在上述任一实施例的基础上,所述装置还包括:写入函数模块,用于获取系统中所述写入函数所在的DLL模块;从所述DLL模块中获取所述写入函数的指针地址,所述指针地址指向内存中保存的崩溃数据,所述写入函数用于将保存在内存中的崩溃数据写入DumP文件中。[0070]在上述任一实施例的基础上,所述装置还包括:第二注册模块,用于注册所述监控进程的信息;,检测到待监控程序发生异常崩溃状况后,根据监控进程的信息,向监控进程发送待监控程序的异常崩溃信号。_[0071]图3为本发明实施例提供的抓取Dump文件的设备的结构示意图,如图3所示,该设备包括:至少一个处理器301;以及与所述处理器301通信连接的至少一个存储器3〇2,其中:所述存储器302存储有可被所述处理器301执行的程序指令,所述处理器301调用所述程序指令能够执行上述各实施例所提供的抓取Dump文件的方法,例如包括:S1,当预先创建的监控进程接收到待监控程序的异常崩溃信号时,在监控进程中创建Dump文件;S2,在监控进程中根据待监控程序ID,读取待监控程序的崩溃数据,并通过预先定义的处理函数将崩溃数据保存至内存;S3,在监控进程中通过调用与Dump文件对应的写入函数,将所述崩溃数据写入Dump文件中。[0072]本发明实施例还提供一种非暂态计算机可读存储介质,该非暂态计算机可读存储介质存储计算机指令,该计算机指令使计算机执行对应实施例所提供的抓取Dump文件的方法,例如包括:S1,当预先创建的监控进程接收到待监控程序的异常崩溃信号时,在监控进程中创建Dump文件;S2,在监控进程中根据待监控程序ID,读取待监控程序的崩溃数据,并通过预先定义的处理函数将崩溃数据保存至内存;S3,在监控进程中通过调用与Dump文件对应的写入函数,将所述崩溃数据写入Dump文件中。[0073]以上所描述的抓取Dump文件的设备等实施例仅仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。[0074]通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如R0MRAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备可以是个人计算机,服务器,或者网络设备等执行各个实施例或者实施例的某些部分方法。[0075]最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精祌和范围。

权利要求:1.一种抓取Dump文件的方法,其特征在于,包括:S1,当预先创建的监控进程接收到待监控程序的异常崩溃信号时,在监控进程中创建Dump文件;S2,在监控进程中根据待监控程序ID,读取待监控程序的崩溃数据,并通过预先定义的处理函数将崩溃数据保存至内存;S3,在监控进程中通过调用与Dump文件对应的写入函数,将所述崩溃数据写入Dump文件中。2.根据权利要求1所述的方法,其特征在于,所述步骤S2前还包括:定义所述处理函数,其中,所述处理函数的参数为指针地址,所述指针地址指向崩溃数据,所述处理函数用于将输入的崩溃数据保存至内存中。3.根据权利要求2所述的方法,其特征在于,所述定义所述处理函数的步骤后还包括:获取待监控程序ID;将处理函数的指针地址和待监控程序ID注册至所述监控进程。4.根据权利要求3所述的方法,其特征在于,所述步骤S2具体包括:S21,在监控进程中根据待监控程序ID,读取与所述待监控程序ID对应的崩溃数据;S22,在监控进程中调用所述处理函数,将所述崩溃数据保存至内存。5.根据权利要求1所述的方法,其特征在于,所述步骤S3前还包括:获取系统中所述写入函数所在的DLL模块;从所述DLL模块中获取所述写入函数的指针地址,所述指针地址指向内存中保存的崩溃数据,所述写入函数用于将保存在内存中的崩溃数据写入Dump文件中。6.根据权利要求1所述的方法,其特征在于,所述步骤S1前还包括:注册所述监控进程的信息;检测到待监控程序发生异常崩溃状况后,根据监控进程的信息,向监控进程发送待监控程序的异常崩溃信号。7.—种抓取Dump文件的装置,其特征在于,包括:创建模块,用于当预先创建的监控进程接收到待监控程序的异常崩溃信号时,在监控进程中创建Dump文件;保存模块,用于在监控进程中根据待监控程序ID,读取待监控程序的崩溃数据,并通过预先定义的处理函数将崩溃数据保存至内存;写入模块,用于在监控进程中通过调用与Dump文件对应的写入函数,将所述崩溃数据写入Dump文件中。8.根据权利要求7所述的装置,其特征在于,还包括:定义模块,用于定义所述处理函数,其中,所述处理函数的参数为指针地址,所述指针地址指向崩溃数据,所述处理函数用于将输入的崩溃数据保存至内存中。9.一种抓取Dump文件的设备,其特征在于,包括:至少一个处理器;以及与所述处理器通信连接的至少一个存储器,其中:所述存储器存储有可被所述处理器执行的程序指令,所述处理器调用所述程序指令能够执行如权利要求1至6任一所述的方法。10.—种非暂态计算机可读存储介质,其特征在于,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行如权利要求1至6任一所述的方法。

百度查询: 武汉斗鱼网络科技有限公司 一种抓取Dump文件的方法、装置和设备

免责声明
1、本报告根据公开、合法渠道获得相关数据和信息,力求客观、公正,但并不保证数据的最终完整性和准确性。
2、报告中的分析和结论仅反映本公司于发布本报告当日的职业理解,仅供参考使用,不能作为本公司承担任何法律责任的依据或者凭证。