CN108170595A - 一种转储文件生成方法及数据探针的安装和卸载方法 - Google Patents
一种转储文件生成方法及数据探针的安装和卸载方法 Download PDFInfo
- Publication number
- CN108170595A CN108170595A CN201711423554.2A CN201711423554A CN108170595A CN 108170595 A CN108170595 A CN 108170595A CN 201711423554 A CN201711423554 A CN 201711423554A CN 108170595 A CN108170595 A CN 108170595A
- Authority
- CN
- China
- Prior art keywords
- dump file
- program
- dump
- operating system
- file generation
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种转储文件生成方法、装置、数据探针的安装和卸载方法及计算设备,转储文件生成方法包括:接收操作***对各程序是否出现崩溃行为的检测结果;若检测结果表明存在出现崩溃行为的程序,则对当前出现崩溃行为的每一个程序,判断预设的存储目录下的转储文件的数量是否达到预设的数量阈值;若未达到,则根据从注册表处传递的该程序所对应进程的进程号,获取该进程的进程名称;根据预设的名称生成规则,将当前时间的时间戳、进程名称和进程号进行组合,以形成该程序对应的、待生成的转储文件的文件名;基于该程序的崩溃行为和该文件名,生成相应的转储文件。
Description
技术领域
本发明涉及计算机技术领域,特别涉及一种转储文件生成方法、装置、数据探针的安装和卸载方法及计算设备。
背景技术
当一个程序发布后,用户可通过发布平台将该程序下载到自己的电子设备,将下载好的程序进行安装,以便后续使用。若程序在用户的电子设备上运行时发生崩溃,由于该电子设备对程序开发人员来说是无法访问的,则程序开发人员无法得知程序是在哪里崩溃的,以及崩溃的原因是什么。当然,程序开发人员也并非完全束手无策,还可以通过程序崩溃时所生成的转储文件来进行事后调试,进而了解问题之所在,但转储文件必须用专用工具软件打开,比如Windows***下使用WinDbg打开。
目前,转储文件的生成方法主要是先对注册表进行设置,以便检测到发生崩溃的程序,再针对该程序来生成转储文件,虽然能够监控程序的异常动向,但一方面基于现有的转储文件生成方式所形成的工具,不能集成到相应产品中进行自动化安装设置,另一方面无法控制转储文件的数量且不能对转储文件的名称定制化,不仅容易使得磁盘空间占满,造成资源浪费,还不方便管理人员对转储文件进行排序和查找,以待后续分析。
发明内容
为此,本发明提供一种转储文件生成的技术方案,并提出基于该转储文件生成方案的数据探针的安装和卸载方案,以力图解决或者至少缓解上面存在的问题。
根据本发明的一个方面,提供一种转储文件生成方法,适于在计算设备中执行,计算设备安装有相应的操作***,操作***中安装有一个或多个程序,操作***的注册表被配置为用于指示该操作***检测各程序是否出现崩溃行为,该方法包括如下步骤:首先,接收操作***对各程序是否出现崩溃行为的检测结果;若检测结果表明存在出现崩溃行为的程序,则对当前出现崩溃行为的每一个程序,判断预设的存储目录下的转储文件的数量是否达到预设的数量阈值;若未达到,则根据从注册表处传递的该程序所对应进程的进程号,获取该进程的进程名称;根据预设的名称生成规则,将当前时间的时间戳、进程名称和进程号进行组合,以形成该程序对应的、待生成的转储文件的文件名;基于该程序的崩溃行为和该文件名,生成相应的转储文件。
可选地,在根据本发明的转储文件生成方法中,还包括:若预设的存储目录下的转储文件的数量达到预设的数量阈值,则获取存储目录下各转储文件的文件名;根据各转储文件的文件名中的时间戳信息进行转储文件删除,以保留时间最近的第一数量个转储文件,第一数量为数量阈值与1之差。
可选地,在根据本发明的转储文件生成方法中,基于该程序的崩溃行为和该文件名,生成相应的转储文件的步骤包括:调用转储文件生成接口;将该文件名传递给转储文件生成接口,以指示转储文件生成接口结合该程序的崩溃行为生成相应的转储文件。
根据本发明的又一个方面,提供一种转储文件生成模块,适于驻留在计算设备中,计算设备安装有相应的操作***,操作***中安装有一个或多个程序,操作***的注册表被配置为用于指示该操作***检测各程序是否出现崩溃行为,注册表中注册有转储文件生成模块,该模块包括接收单元、判断单元、获取单元、组合单元和生成单元。其中,接收单元适于接收操作***对各程序是否出现崩溃行为的检测结果;判断单元适于当检测结果表明存在出现崩溃行为的程序时,对当前出现崩溃行为的每一个程序,判断预设的存储目录下的转储文件的数量是否达到预设的数量阈值;获取单元适于当未达到时,根据从注册表处传递的该程序所对应进程的进程号,获取该进程的进程名称;组合单元适于根据预设的名称生成规则,将当前时间的时间戳、进程名称和进程号进行组合,以形成该程序对应的、待生成的转储文件的文件名;生成单元适于基于该程序的崩溃行为和该文件名,生成相应的转储文件。
可选地,在根据本发明的转储文件生成模块中,还包括删除单元,删除单元适于:当预设的存储目录下的转储文件的数量达到预设的数量阈值时,获取存储目录下各转储文件的文件名;根据各转储文件的文件名中的时间戳信息进行转储文件删除,以保留时间最近的第一数量个转储文件,第一数量为数量阈值与1之差。
可选地,在根据本发明的转储文件生成模块中,生成单元进一步适于:调用转储文件生成接口;将该文件名传递给转储文件生成接口,以指示转储文件生成接口结合该程序的崩溃行为生成相应的转储文件。
根据本发明的又一个方面,提供一种数据探针的安装和卸载方法,适于在计算设备中执行,计算设备安装有相应的操作***,数据探针中集成有根据本发明的转储文件生成模块,该方法包括如下步骤:首先,执行数据探针的安装脚本;检测操作***的注册表中是否已注册有与转储文件生成模块不同的、其他用于生成转储文件的模块;若是,则对该已注册的用于生成转储文件的模块进行备份,将数据探针中集成的转储文件生成模块注册到注册表中;若不是,则将数据探针中集成的转储文件生成模块注册到注册表中。
可选地,在根据本发明的数据探针的安装和卸载方法中,还包括:执行数据探针的卸载脚本;从注册表中删除数据探针中集成的转储文件生成模块的注册;若操作***已备份过与数据探针中集成的转储文件生成模块不同的、其他用于生成转储文件的模块,则将该备份过的用于生成转储文件的模块进行恢复,以重新注册到注册表中。
根据本发明的又一个方面,提供一种计算设备,包括根据本发明的压力转储文件生成模块。
根据本发明的又一个方面,提供一种计算设备,包括一个或多个处理器、存储器以及一个或多个程序,其中一个或多个程序存储在存储器中并被配置为由一个或多个处理器执行,一个或多个程序包括用于执行根据本发明的转储文件生成方法和/或根据本发明的数据探针的安装和卸载方法的指令。
根据本发明的又一个方面,还提供一种存储一个或多个程序的计算机可读存储介质,一个或多个程序包括指令,指令当由计算设备执行时,使得计算设备执行根据本发明的转储文件生成方法和/或根据本发明的数据探针的安装和卸载方法。
根据本发明的转储文件生成的技术方案,若操作***中所安装的程序出现崩溃行为,对每一个出现崩溃行为的程序,若预设的存储目录下的转储文件的数量未达到预设的数量阈值,则获取该进程的进程名称,将当前时间的时间戳、进程名称和进程号进行组合,以形成该程序对应的、待生成的转储文件的文件名,基于该程序的崩溃行为和该文件名,生成相应的转储文件。在上述技术方案中,操作***的注册表被配置为用于指示该操作***检测各程序是否出现崩溃行为,方便监用程序的异常动向,而且,还可根据自定义命名规则来自主设定所生成的转储文件的文件名所包含的关键信息,如、时间戳、进程名字、进程号等,便于管理人员对转储文件进行排序和查找。此外,若预设的存储目录下的转储文件的数量达到预设的数量阈值,则根据一定的排序规则删除多余的转储文件,如按转储文件生成的时间戳信息,只保留最新生成的第一数量个转储文件,实现了转储文件存储数量的控制,防止因转储文件生成过多出现用户设备磁盘空间被占满的风险,降低了维护负担。
进而,根据本发明的数据探针的安装和卸载方法,该数据探针中集成有根据本发明的转储文件生成模块,在执行数据探针的安装脚本和卸载脚本的同时,可实现转储文件生成模块的注册和移除,在安装过程中对注册表中已存在的设置选项进行备份,在卸载过程中对原先的设置选项进行还原,简化了用户使用转储文件生成模块的技术负担,并避免了用户对注册表误操作的可能性。
附图说明
为了实现上述以及相关目的,本文结合下面的描述和附图来描述某些说明性方面,这些方面指示了可以实践本文所公开的原理的各种方式,并且所有方面及其等效方面旨在落入所要求保护的主题的范围内。通过结合附图阅读下面的详细描述,本公开的上述以及其它目的、特征和优势将变得更加明显。遍及本公开,相同的附图标记通常指代相同的部件或元素。
图1示出了根据本发明的一个实施例的计算设备100的示意图;
图2示出了根据本发明的一个实施例的转储文件生成方法200的流程图;
图3示出了根据本发明的一个实施例的转储文件生成模块300的示意图;
图4示出了根据本发明的又一个实施例的转储文件生成模块400的示意图;以及
图5示出了根据本发明的一个实施例的数据探针的安装和卸载方法500的示意图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
图1是示例计算设备100的框图。在基本的配置102中,计算设备100典型地包括***存储器106和一个或者多个处理器104。存储器总线108可以用于在处理器104和***存储器106之间的通信。
取决于期望的配置,处理器104可以是任何类型的处理,包括但不限于:微处理器(μP)、微控制器(μC)、数字信息处理器(DSP)或者它们的任何组合。处理器104可以包括诸如一级高速缓存110和二级高速缓存112之类的一个或者多个级别的高速缓存、处理器核心114和寄存器116。示例的处理器核心114可以包括运算逻辑单元(ALU)、浮点数单元(FPU)、数字信号处理核心(DSP核心)或者它们的任何组合。示例的存储器控制器118可以与处理器104一起使用,或者在一些实现中,存储器控制器118可以是处理器104的一个内部部分。
取决于期望的配置,***存储器106可以是任意类型的存储器,包括但不限于:易失性存储器(诸如RAM)、非易失性存储器(诸如ROM、闪存等)或者它们的任何组合。***存储器106可以包括操作***120、一个或者多个程序122以及程序数据124。在一些实施方式中,程序122可以布置为在操作***120上由一个或多个处理器104利用程序数据124执行指令。
计算设备100还可以包括有助于从各种接口设备(例如,输出设备142、外设接口144和通信设备146)到基本配置102经由总线/接口控制器130的通信的接口总线140。示例的输出设备142包括图形处理单元148和音频处理单元150。它们可以被配置为有助于经由一个或者多个A/V端口152与诸如显示器或者扬声器之类的各种外部设备进行通信。示例外设接口144可以包括串行接口控制器154和并行接口控制器156,它们可以被配置为有助于经由一个或者多个I/O端口158和诸如输入设备(例如,键盘、鼠标、笔、语音输入设备、触摸输入设备)或者其他外设(例如打印机、扫描仪等)之类的外部设备进行通信。示例的通信设备146可以包括网络控制器160,其可以被布置为便于经由一个或者多个通信端口164与一个或者多个其他计算设备162通过网络通信链路的通信。
网络通信链路可以是通信介质的一个示例。通信介质通常可以体现为在诸如载波或者其他传输机制之类的调制数据信号中的计算机可读指令、数据结构、程序模块,并且可以包括任何信息递送介质。“调制数据信号”可以这样的信号,它的数据集中的一个或者多个或者它的改变可以在信号中编码信息的方式进行。作为非限制性的示例,通信介质可以包括诸如有线网络或者专线网络之类的有线介质,以及诸如声音、射频(RF)、微波、红外(IR)或者其它无线介质在内的各种无线介质。这里使用的术语计算机可读介质可以包括存储介质和通信介质二者。
计算设备100可以实现为服务器,例如文件服务器、数据库服务器、应用程序服务器和WEB服务器等,也可以实现为小尺寸便携(或者移动)电子设备的一部分,这些电子设备可以是诸如蜂窝电话、个人数字助理(PDA)、个人媒体播放器设备、无线网络浏览设备、个人头戴设备、应用专用设备、或者可以包括上面任何功能的混合设备。计算设备100还可以实现为包括桌面计算机和笔记本计算机配置的个人计算机。在一些实施例中,计算设备100被配置为执行根据本发明的转储文件生成方法200和/或数据探针的安装和卸载方法500。程序122包括根据本发明的转储文件生成模块300。
需要说明的是,操作***120即为计算设备100中所安装的相应的操作***,根据本发明的一个实施例,操作***120为Windows***,其中安装有8个程序122,分别标记为P1、P2、P3、P4、P5、P6、P7和P8。操作***120中的注册表作为一个重要的数据库,是用于存储***和应用程序的设置信息,该注册表被配置为用于指示操作***120检测各程序是否出现崩溃行为。在该实施方式中,该注册表中提供了一个配置项,当对该配置项进行相应设置后,若有程序发生崩溃,则Windows***就能检测到程序的崩溃行为,以便通过注册表发送出相关的崩溃信息、如程序对应当前进程的进程号等。具体的,该配置项为“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug”。此外,关于操作***的版本,本发明并不进行限制。
图2示出了根据本发明的一个实施例的转储文件生成方法200的流程图。转储文件生成方法200适于在计算设备(例如图1所示的计算设备100)中执行。
如图2所示,方法200始于步骤S210。在步骤S210中,接收操作***对各程序是否出现崩溃行为的检测结果。根据本发明的一个实施例,当程序P1~P8中任一个或任几个发生崩溃时,操作***120即可检测到相应程序的崩溃行为并将检测结果进行传递,此时接收操作***120对程序P1~P8是否出现崩溃行为的检测结果。
随后,进入步骤S220,若检测结果表明存在出现崩溃行为的程序,则对当前出现崩溃行为的每一个程序,判断预设的存储目录下的转储文件的数量是否达到预设的数量阈值。根据本发明的一个实施例,将预设的存储目录记为L1,存储目录L1下的转储文件的数量为9,数量阈值优选为10。在该实施方式中,从步骤S210所接收到的检测结果表明出现崩溃行为的程序为P2和P6,则对程序P2而言,判断存储目录L1下的转储文件的数量是否达到10。由于转储文件是以“.dmp”为文件名称的后缀,则可通过检测存储目录L1下各文件的名称后缀是否为“.dmp”来统计转储文件的数量,得到当前时刻存储目录L1下的转储文件的数量为9,并未达到10。
在步骤S230中,若未达到,则根据从注册表处传递的该程序所对应进程的进程号,获取该进程的进程名称。根据本发明的一个实施例,在程序P2发生崩溃时,存储目录L1下转储文件的数量未达到预设的数量阈值,而此时注册表处传递的程序P2所对应进程的进程号为ID1,根据进程号ID1来获取该进程的进程名称,将该进程名称记为N1。关于根据进程号得到进程名称的关键代码如下所示:
std::wstring GetTime()
{
SYSTEMTIME time;
GetLocalTime(&time);
wchar_t buff[64]={0};
swprintf_s(buff,L"%04u%02u%02u%02u%02u%02u%03u",time.wYear,
time.wMonth,time.wDay,time.wHour,time.wMinute,time.wSecond,
time.wMilliseconds);
return std::wstring(buff);
}
HANDLE pHandle=OpenProcess(PROCESS_QUERY_INFORMATION|
PROCESS_VM_READ|PROCESS_DUP_HANDLE,TRUE,pid);
wchar_t procName[MAX_PATH];
GetModuleFileNameEx(pHandle,NULL,procName,MAX_PATH);
auto filename=PathFindFileName(procName);
//format the file name,and create file
std::wstringstream ws;
ws<<GetTime()<<L"_"<<filename<<L"_"<<pid<<L".dmp";
HANDLE hFile=CreateFile(ws.str().c_str(),GENERIC_WRITE,NULL,
NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
接下来,在步骤S240中,根据预设的名称生成规则,将当前时间的时间戳、进程名称和进程号进行组合,以形成该程序对应的、待生成的转储文件的文件名。根据本发明的一个实施例,名称生成规则预设为以当前时间的时间戳为首,以下划线“_”为连接符,依次相连进程名称和进程号来形成相应的文件名。在该实施方式中,当前时间的时间戳记为T1,则根据该名称生成规则所形成的程序P2对应的、待生成的转储文件的文件名为T1_N1_ID1。当然,名称生成规则可以根据实际的应用情况或需求来进行调整,并不限于上述示例,这些对于了解本发明方案的技术人员来说是可以容易想到的,并且也在本发明的保护范围之内,此处不予以赘述。
最后,执行步骤S250,基于该程序的崩溃行为和该文件名,生成相应的转储文件。根据本发明的一个实施例,可以通过如下方式来生成转储文件。首先,调用转储文件生成接口,再将该文件名传递给转储文件生成接口,以指示转储文件生成接口结合该程序的崩溃行为生成相应的转储文件。在该实施方式种,转储文件生成接口为MiniDumpWriteDumpAPI,调用了MiniDump WriteDump API后,将文件名T1_N1_ID1传递给MiniDumpWriteDumpAPI,进而指示MiniDumpWriteDump API来结合程序P2的崩溃行为生成相应的转储文件,将该转储文件记为M1。关于生成转储文件的关键代码如下所示:
BOOL CALLBACK MiniDumpCallback(
_In_PVOID CallbackParam,
_In_const PMINIDUMP_CALLBACK_INPUT pInput,
_Inout_PMINIDUMP_CALLBACK_OUTPUT pOutput)
{
return=TRUE;
}
MINIDUMP_CALLBACK_INFORMATION dcb={0};
dcb.CallbackRoutine=MiniDumpCallback;
MINIDUMP_TYPE type=(MINIDUMP_TYPE)(
MiniDumpWithDataSegs|MiniDumpWithHandleData|
MiniDumpWithProcessThreadData|MiniDumpScanMemory|
MiniDumpWithIndirectlyReferencedMemory);
BOOL bWriteDump=MiniDumpWriteDump(pHandle,pid,hFile,type,
NULL,NULL,&dcb);
此后,将转储文件M1存储到存储目录L1下,则存储目录L1下的转储文件的数量为9+1=10。那么对于程序P6而言,继续执行步骤S220,判断预设的存储目录下的转储文件的数量是否达到预设的数量阈值。很显然,此时存储目录L1下的转储文件的数量达到数量阈值10,则根据本发明的又一个实施例,若预设的存储目录下的转储文件的数量达到预设的数量阈值,则获取存储目录下各转储文件的文件名,根据各转储文件的文件名中的时间戳信息进行转储文件删除,以保留时间最近的第一数量个转储文件,第一数量为数量阈值与1之差。在该实施方式中,预设的存储目录L1下的10个转储文件分别为M1、D1、D2、D3、D4、D5、D6、D7、D8和D9,表1示出了根据本发明的一个实施例的存储目录L1下各转储文件的文件名的示例,具体如下所示:
转储文件 | 文件名 |
M1 | T1_N1_ID1 |
D1 | A1_B1_C1 |
D2 | A2_B2_C2 |
D3 | A3_B3_C3 |
D4 | A4_B4_C4 |
D5 | A5_B5_C5 |
D6 | A6_B6_C6 |
D7 | A7_B7_C7 |
D8 | A8_B8_C8 |
D9 | A9_B9_C9 |
表1
如表1所示,其中A1、A2、A3、A4、A5、A6、A7、A8和A9依次表示转储文件D1~D9的文件名中的时间戳信息,对应于相应文件名生成时刻的时间戳,B1、B2、B3、B4、B5、B6、B7、B8和B9依次表示转储文件D1~D9对应的发生崩溃的程序所关联进程的进程名称,而C1、C2、C3、C4、C5、C6、C7、C8和C9依次表示转储文件D1~D9对应的发生崩溃的程序所关联进程的进程号。
将T1、A1~A9这10个时间戳按照从大到小的顺序进行排序,可得排序结果为T1、A1、A2、A3、A4、A5、A6、A7、A8和A9,由于时间戳越大表明距离当前时刻越近,而第一数量为10-1=9,则需要将时间戳A9对应的转储文件D9删除,所保留的时间最近的9个转储文件依次为M1、D1、D2、D3、D4、D5、D6、D7和D8。此时,存储目录L1下的转储文件的数量为9,未达到数量阈值10,则对程序P6可继续执行步骤S230、240和S250,最终生成文件名为T2_N2_ID2的转储文件M2,并将转储文件M2存储到存储目录L1下。其中,T2表示该文件名生成时刻的时间戳,N2表示程序P6所对应进程的进程名称,ID2表示程序P6所对应进程的进程号。关于生成程序P6相应的转储文件的具体过程,可参见上述生成程序P2所对应转储文件的步骤,此处不再赘述。另外,对于预设的存储目录下的转储文件的数量达到预设的数量阈值的情况,还可以对转储文件的重要性等其他方面进行综合考虑,以确定最终需要删除和保留的转储文件,对此本发明并不限制,这些对于了解本发明方案的技术人员来说是可以容易想到的,并且也在本发明的保护范围之内,此处不予以赘述。
值得注意的是,当操作***的检测结果表明出现崩溃行为的程序有多个时,若对每一个出现崩溃行为的程序,均执行一次预设的存储目录下的转储文件的数量是否达到预设的数量阈值的判断,会产生不必要的时间成本和资源消耗,降低运行效率。因此,根据本发明的又一个实施例,在此种情况下,可统计当前时刻出现崩溃行为的程序的数量作为第二数量,并判断预设的存储目录下的转储文件的数量与第二数量之和是否达到预设的数量阈值,若未达到,则对当前出现崩溃行为的每一个程序,根据从注册表处传递的该程序所对应进程的进程号,获取该进程的进程名称,根据预设的名称生成规则,将当前时间的时间戳、进程名称和进程号进行组合,以形成该程序对应的、待生成的转储文件的文件名,基于该程序的崩溃行为和该文件名,生成相应的转储文件。进一步的,若预设的存储目录下的转储文件的数量与第二数量之和达到预设的数量阈值,则获取存储目录下各转储文件的文件名,根据各转储文件的文件名中的时间戳信息进行转储文件删除,以保留时间最近的第三数量个转储文件,第三数量为预设的存储目录下的转储文件的数量加上第二数量后减去数量阈值得到的差值。
图3示出了根据本发明的一个实施例的转储文件生成模块300的示意图。转储文件生成模块300适于驻留在计算设备100中,计算设备100的操作***120的注册表中注册有转储文件生成模块300。具体的,转储文件生成模块300被设置于注册表的配置项“HKEY_LOCAL_MACHINE\SOFTWARE\Micro soft\Windows NT\CurrentVersion\AeDebug”处。如图3所示,转储文件生成模块300包括接收单元310、判断单元320、获取单元330、组合单元340和生成单元350。
接收单元310适于接收操作***对各程序是否出现崩溃行为的检测结果。接收单元310执行上述操作的具体细节可参见方法200中的步骤S210,此处不予以赘述。
判断单元320与接收单元310相连,适于当检测结果表明存在出现崩溃行为的程序时,对当前出现崩溃行为的每一个程序,判断预设的存储目录下的转储文件的数量是否达到预设的数量阈值。判断单元320执行上述操作的具体细节可参见方法200中的步骤S220,此处不予以赘述。
获取单元330与判断单元320相连,适于当未达到时,根据从注册表处传递的该程序所对应进程的进程号,获取该进程的进程名称。获取单元330执行上述操作的具体细节可参见方法200中的步骤S230,此处不予以赘述。
组合单元340与获取单元330相连,适于根据预设的名称生成规则,将当前时间的时间戳、进程名称和进程号进行组合,以形成该程序对应的、待生成的转储文件的文件名。组合单元340执行上述操作的具体细节可参见方法200中的步骤S240,此处不予以赘述。
生成单元350与组合单元340相连,适于基于该程序的崩溃行为和该文件名,生成相应的转储文件。生成单元350进一步适于调用转储文件生成接口,将该文件名传递给转储文件生成接口,以指示转储文件生成接口结合该程序的崩溃行为生成相应的转储文件。生成单元350执行上述操作的具体细节可参见方法200中的步骤S250,此处不予以赘述。
图4示出了根据本发明的又一个实施例的转储文件生成模块400的示意图。如图4所示,转储文件生成模块400的接收单元410、判断单元420、获取单元430、组合单元440和生成单元450,分别与图3中转储文件生成模块300的接收单元310、判断单元320、获取单元330、组合单元340和生成单元350一一对应,是一致的,并新增了与判断单元420和获取单元430相连的删除单元460。
删除单元460分别与判断单元420和获取单元430相连,适于当预设的存储目录下的转储文件的数量达到预设的数量阈值时,获取存储目录下各转储文件的文件名,根据各转储文件的文件名中的时间戳信息进行转储文件删除,以保留时间最近的第一数量个转储文件,第一数量为数量阈值与1之差。删除单元460执行上述操作的具体细节可参见方法200中对程序P6的相关处理,此处不予以赘述。
考虑到转储文件生成模块是需要注册到注册表中,而对于普通用户来说,这一注册过程会对用户带来额外的技术负担,甚至具有破坏注册表设置的可能性。为避免这一情况的发生,可以考虑将转储文件生成模块集成到数据探针中,通过安装和卸载数据探针来加载该转储文件生成模块,实现统一部署。图5示出了根据本发明的一个实施例的数据探针的安装和卸载方法500的流程图。数据探针的安装和卸载方法500适于在计算设备(例如图1所示的计算设备100)中执行。
如图5所示,方法500始于步骤S510。在步骤S510中,执行数据探针的安装脚本。根据本发明的一个实施例,数据探针记为E1,该数据探针中集成有转储文件生成模块300。
随后,进入步骤S520,检测操作***的注册表中是否已注册有与转储文件生成模块不同的、其他用于生成转储文件的模块。根据本发明的一个实施例,检测计算设备100的操作***120的注册表中是否已注册有、与转储文件生成模块300不同的、其他用于生成转储文件的模块。
接下来,在步骤S530中,若是,则对该已注册的用于生成转储文件的模块进行备份,将数据探针中集成的转储文件生成模块注册到注册表中。根据本发明的一个实施例,操作***120的注册表中已注册有与转储文件生成模块300不同的、其他用于生成转储文件的模块F1,则对该已注册的用于生成转储文件的模块F1进行备份,将数据探针E1中集成的转储文件生成模块300注册到注册表中的配置项“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug”处,最终完成数据探针E1的安装。
最后,在步骤S540中,若不是,则将数据探针中集成的转储文件生成模块注册到注册表中。根据本发明的又一个实施例,操作***120的注册表中未注册有与转储文件生成模块300不同的、其他用于生成转储文件的模块,则直接将数据探针E1中集成的转储文件生成模块300注册到注册表中,最终完成数据探针E1的安装。关于数据探针的安装脚本,以下为相应的代码示例:
set regKey="HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows
NT\CurrentVersion\AeDebug"
set x86DbgDump="%~dp0x86\DbgDump.exe\"%%ld
reg query!regKey!/v Debugger>nul 2>nul
if ERRORLEVEL 1(
reg add!regKey!/v Debugger/t REG_SZ/d\"!x86DbgDump!"/f>nul 2>nul
)else(
for/f"tokens=1,2,3,*"%%a in('reg query!regKey!/v Debugger')do(
set x86Debugger=%%c
set x86Options=%%d
)
reg add!regKey!/v DebuggerBackup/t REG_SZ/d"\"!x86Debugger!\
"!x86Options!"/f>nul 2>nul
reg add!regKey!/v Debugger/t REG_SZ/d\"!x86DbgDump!"/f>nul 2>nul
)
reg query!regKey!/v Auto>nul 2>nul
if ERRORLEVEL 1(
reg add!regKey!/v Auto/t REG_SZ/d 1/f>nul 2>nul
)else(
for/f"tokens=1,2,3,*"%%a in('reg query!regKey!/v Auto')do(
set x86Auto=%%c
)
reg add!regKey!/v AutoBackup/t REG_SZ/d"!x86Auto!"/f>nul 2>nul
reg add!regKey!/v Auto/t REG_SZ/d 1/f>nul 2>nul
)
对于安装有数据探针的计算设备100而言,若要卸载该数据探针,则根据本发明的一个实施例,方法500还包括执行数据探针的卸载脚本,从注册表中删除数据探针中集成的转储文件生成模块的注册,若操作***已备份过与数据探针中集成的转储文件生成模块不同的、其他用于生成转储文件的模块,则将该备份过的用于生成转储文件的模块进行恢复,以重新注册到注册表中。在该实施方式中,计算设备100中安装有数据探针E1,该数据探针中集成有转储文件生成模块300。在卸载数据探针E1时,先执行其卸载脚本,从注册表中删除数据探针E1中集成的转储文件生成模块300的注册,由于操作***120已备份过与数据探针E1中集成的转储文件生成模块300不同的、其他用于生成转储文件的模块F1,则将该备份过的用于生成转储文件的模块F1进行恢复,以重新注册到注册表中,最终完成数据探针E1的卸载。关于数据探针的卸载脚本,以下为相应的代码示例:
set regKey="HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows
NT\CurrentVersion\AeDebug"
reg query!regKey!/v DebuggerBackup>nul 2>nul
if ERRORLEVEL 1(
reg delete!regKey!/v Debugger/f>nul 2>nul
)else(
for/f"tokens=1,2,3,*"%%a in('reg query!regKey!/v DebuggerBackup')do(
set x86DebuggerBackup=%%c
set x86OptionsBackup=%%d
)
reg add!regKey!/v Debugger/t REG_SZ/d"\"!x86DebuggerBackup!
\"!x86OptionsBackup!"/f>nul 2>nul
reg delete!regKey!/v DebuggerBackup/f>nul 2>nul
)
reg query!regKey!/v AutoBackup>nul 2>nul
if ERRORLEVEL 1(
reg delete!regKey!/v Auto/f>nul 2>nul
)else(
for/f"tokens=1,2,3,*"%%a in('reg query!regKey!/v AutoBackup')do(
set x86AutoBackup=%%c
)
reg add!regKey!/v Auto/t REG_SZ/d"!x86AutoBackup!"/f>nul 2>nul
reg delete!regKey!/v AutoBackup/f>nul 2>nul
)
现有的转储文件的生成方法主要是先对注册表进行设置,以便检测到发生崩溃的程序,再针对该程序来生成转储文件,虽然能够监控程序的异常动向,但基于现有的转储文件生成方式所形成的工具,不能集成到相应产品中进行自动化安装设置,且不能控制转储文件的数量和自定义命名,使得磁盘空间容易占满,造成资源浪费,不方便管理人员对转储文件进行排序和查找。根据本发明实施例的转储文件生成的技术方案,若操作***中所安装的程序出现崩溃行为,对每一个出现崩溃行为的程序,若预设的存储目录下的转储文件的数量未达到预设的数量阈值,则获取该进程的进程名称,将当前时间的时间戳、进程名称和进程号进行组合,以形成该程序对应的、待生成的转储文件的文件名,基于该程序的崩溃行为和该文件名,生成相应的转储文件。在上述技术方案中,操作***的注册表被配置为用于指示该操作***检测各程序是否出现崩溃行为,方便监用程序的异常动向,而且,还可根据自定义命名规则来自主设定所生成的转储文件的文件名所包含的关键信息,如、时间戳、进程名字、进程号等,便于管理人员对转储文件进行排序和查找。此外,若预设的存储目录下的转储文件的数量达到预设的数量阈值,则根据一定的排序规则删除多余的转储文件,如按转储文件生成的时间戳信息,只保留最新生成的第一数量个转储文件,实现了转储文件存储数量的控制,防止因转储文件生成过多出现用户设备磁盘空间被占满的风险,降低了维护负担。进而,根据本发明实施例的数据探针的安装和卸载方法,该数据探针中集成有根据本发明的转储文件生成模块,在执行数据探针的安装脚本和卸载脚本的同时,可实现转储文件生成模块的注册和移除,在安装过程中对注册表中已存在的设置选项进行备份,在卸载过程中对原先的设置选项进行还原,简化了用户使用转储文件生成模块的技术负担,并避免了用户对注册表误操作的可能性。
C8.如C7所述的方法,还包括:
执行所述数据探针的卸载脚本;
从所述注册表中删除所述数据探针中集成的转储文件生成模块的注册;
若所述操作***已备份过与所述数据探针中集成的转储文件生成模块不同的、其他用于生成转储文件的模块,则将该备份过的用于生成转储文件的模块进行恢复,以重新注册到所述注册表中。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下被实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员应当理解在本文所公开的示例中的设备的模块或单元或组间可以布置在如该实施例中所描述的设备中,或者可替换地可以定位在与该示例中的设备不同的一个或多个设备中。前述示例中的模块可以组合为一个模块或者此外可以分成多个子模块。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组间组合成一个模块或单元或组间,以及此外可以把它们分成多个子模块或子单元或子组间。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
此外,所述实施例中的一些在此被描述成可以由计算机***的处理器或者由执行所述功能的其它装置实施的方法或方法元素的组合。因此,具有用于实施所述方法或方法元素的必要指令的处理器形成用于实施该方法或方法元素的装置。此外,装置实施例的在此所述的元素是如下装置的例子:该装置用于实施由为了实施该发明的目的的元素所执行的功能。
这里描述的各种技术可结合硬件或软件,或者它们的组合一起实现。从而,本发明的方法和设备,或者本发明的方法和设备的某些方面或部分可采取嵌入有形媒介,例如软盘、CD-ROM、硬盘驱动器或者其它任意机器可读的存储介质中的程序代码(即指令)的形式,其中当程序被载入诸如计算机之类的机器,并被所述机器执行时,所述机器变成实践本发明的设备。
在程序代码在可编程计算机上执行的情况下,计算设备一般包括处理器、处理器可读的存储介质(包括易失性和非易失性存储器和/或存储元件),至少一个输入装置,和至少一个输出装置。其中,存储器被配置用于存储程序代码;处理器被配置用于根据该存储器中存储的所述程序代码中的指令,执行本发明的转储文件生成方法和/或数据探针的安装和卸载方法。
以示例而非限制的方式,计算机可读介质包括计算机存储介质和通信介质。计算机可读介质包括计算机存储介质和通信介质。计算机存储介质存储诸如计算机可读指令、数据结构、程序模块或其它数据等信息。通信介质一般以诸如载波或其它传输机制等已调制数据信号来体现计算机可读指令、数据结构、程序模块或其它数据,并且包括任何信息传递介质。以上的任一种的组合也包括在计算机可读介质的范围之内。
如在此所使用的那样,除非另行规定,使用序数词“第一”、“第二”、“第三”等等来描述普通对象仅仅表示涉及类似对象的不同实例,并且并不意图暗示这样被描述的对象必须具有时间上、空间上、排序方面或者以任意其它方式的给定顺序。
尽管根据有限数量的实施例描述了本发明,但是受益于上面的描述,本技术领域内的技术人员明白,在由此描述的本发明的范围内,可以设想其它实施例。此外,应当注意,本说明书中使用的语言主要是为了可读性和教导的目的而选择的,而不是为了解释或者限定本发明的主题而选择的。因此,在不偏离所附权利要求书的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。对于本发明的范围,对本发明所做的公开是说明性的,而非限制性的,本发明的范围由所附权利要求书限定。
Claims (10)
1.一种转储文件生成方法,适于在计算设备中执行,所述计算设备安装有相应的操作***,所述操作***中安装有一个或多个程序,所述操作***的注册表被配置为用于指示该操作***检测各程序是否出现崩溃行为,所述方法包括:
接收所述操作***对各程序是否出现崩溃行为的检测结果;
若所述检测结果表明存在出现崩溃行为的程序,则对当前出现崩溃行为的每一个程序,判断预设的存储目录下的转储文件的数量是否达到预设的数量阈值;
若未达到,则根据从所述注册表处传递的该程序所对应进程的进程号,获取该进程的进程名称;
根据预设的名称生成规则,将当前时间的时间戳、所述进程名称和所述进程号进行组合,以形成该程序对应的、待生成的转储文件的文件名;
基于该程序的崩溃行为和该文件名,生成相应的转储文件。
2.如权利要求1所述的方法,还包括:
若预设的存储目录下的转储文件的数量达到预设的数量阈值,则获取所述存储目录下各转储文件的文件名;
根据各转储文件的文件名中的时间戳信息进行转储文件删除,以保留时间最近的第一数量个转储文件,所述第一数量为所述数量阈值与1之差。
3.如权利要求1或2所述的方法,所述基于该程序的崩溃行为和该文件名,生成相应的转储文件的步骤包括:
调用转储文件生成接口;
将该文件名传递给所述转储文件生成接口,以指示所述转储文件生成接口结合该程序的崩溃行为生成相应的转储文件。
4.一种转储文件生成模块,适于驻留在计算设备中,所述计算设备安装有相应的操作***,所述操作***中安装有一个或多个程序,所述操作***的注册表被配置为用于指示该操作***检测各程序是否出现崩溃行为,所述注册表中注册有所述转储文件生成模块,所述模块包括:
接收单元,适于接收所述操作***对各程序是否出现崩溃行为的检测结果;
判断单元,适于当所述检测结果表明存在出现崩溃行为的程序时,对当前出现崩溃行为的每一个程序,判断预设的存储目录下的转储文件的数量是否达到预设的数量阈值;
获取单元,适于当未达到时,根据从所述注册表处传递的该程序所对应进程的进程号,获取该进程的进程名称;
组合单元,适于根据预设的名称生成规则,将当前时间的时间戳、所述进程名称和所述进程号进行组合,以形成该程序对应的、待生成的转储文件的文件名;
生成单元,适于基于该程序的崩溃行为和该文件名,生成相应的转储文件。
5.如权利要求4所述的模块,还包括删除单元,所述删除单元适于:
当预设的存储目录下的转储文件的数量达到预设的数量阈值时,获取所述存储目录下各转储文件的文件名;
根据各转储文件的文件名中的时间戳信息进行转储文件删除,以保留时间最近的第一数量个转储文件,所述第一数量为所述数量阈值与1之差。
6.如权利要求4或5所述的模块,所述生成单元进一步适于:
调用转储文件生成接口;
将该文件名传递给所述转储文件生成接口,以指示所述转储文件生成接口结合该程序的崩溃行为生成相应的转储文件。
7.一种数据探针的安装和卸载方法,适于在计算设备中执行,所述计算设备安装有相应的操作***,所述数据探针中集成有如权利要求4-6中任一项所述的转储文件生成模块,所述方法包括:
执行所述数据探针的安装脚本;
检测所述操作***的注册表中是否已注册有与所述转储文件生成模块不同的、其他用于生成转储文件的模块;
若是,则对该已注册的用于生成转储文件的模块进行备份,将所述数据探针中集成的转储文件生成模块注册到所述注册表中;
若不是,则将所述数据探针中集成的转储文件生成模块注册到所述注册表中。
8.一种计算设备,包括如权利要求4-6中任一项所述的转储文件生成模块。
9.一种计算设备,包括:
一个或多个处理器;
存储器;以及
一个或多个程序,其中所述一个或多个程序存储在所述存储器中并被配置为由所述一个或多个处理器执行,所述一个或多个程序包括用于执行根据权利要求1至3所述的方法中的任一方法和/或权利要求7所述的方法的指令。
10.一种存储一个或多个程序的计算机可读存储介质,所述一个或多个程序包括指令,所述指令当由计算设备执行时,使得所述计算设备执行根据权利要求1至3所述的方法中的任一方法和/或权利要求7所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711423554.2A CN108170595B (zh) | 2017-12-25 | 2017-12-25 | 一种转储文件生成方法及数据探针的安装和卸载方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711423554.2A CN108170595B (zh) | 2017-12-25 | 2017-12-25 | 一种转储文件生成方法及数据探针的安装和卸载方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108170595A true CN108170595A (zh) | 2018-06-15 |
CN108170595B CN108170595B (zh) | 2021-03-16 |
Family
ID=62520605
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711423554.2A Active CN108170595B (zh) | 2017-12-25 | 2017-12-25 | 一种转储文件生成方法及数据探针的安装和卸载方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108170595B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110768875A (zh) * | 2019-12-27 | 2020-02-07 | 北京安博通科技股份有限公司 | 一种基于dns学习的应用识别方法及*** |
CN111898345A (zh) * | 2020-07-24 | 2020-11-06 | 北京车和家信息技术有限公司 | 基于详细设计文档的数据处理方法和装置 |
CN113553211A (zh) * | 2021-09-23 | 2021-10-26 | 统信软件技术有限公司 | 一种核心转储文件的生成方法、计算设备及存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7028056B1 (en) * | 2000-04-14 | 2006-04-11 | Microsoft Corporation | Method and arrangements for generating debugging information following software failures |
CN102467516A (zh) * | 2010-11-04 | 2012-05-23 | 北京北方微电子基地设备工艺研究中心有限责任公司 | 设备控制过程中的日志记录方法、装置及*** |
CN103838589A (zh) * | 2012-11-20 | 2014-06-04 | 腾讯科技(深圳)有限公司 | 一种插件删除、恢复方法及客户端 |
CN105872778A (zh) * | 2016-03-31 | 2016-08-17 | 乐视控股(北京)有限公司 | 升级控制方法及装置 |
CN106484617A (zh) * | 2016-10-09 | 2017-03-08 | 武汉斗鱼网络科技有限公司 | 用于Windows软件产品的dump文件自动分析统计方法及*** |
CN106649089A (zh) * | 2016-10-09 | 2017-05-10 | 武汉斗鱼网络科技有限公司 | 一种程序崩溃分析方法及*** |
-
2017
- 2017-12-25 CN CN201711423554.2A patent/CN108170595B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7028056B1 (en) * | 2000-04-14 | 2006-04-11 | Microsoft Corporation | Method and arrangements for generating debugging information following software failures |
CN102467516A (zh) * | 2010-11-04 | 2012-05-23 | 北京北方微电子基地设备工艺研究中心有限责任公司 | 设备控制过程中的日志记录方法、装置及*** |
CN103838589A (zh) * | 2012-11-20 | 2014-06-04 | 腾讯科技(深圳)有限公司 | 一种插件删除、恢复方法及客户端 |
CN105872778A (zh) * | 2016-03-31 | 2016-08-17 | 乐视控股(北京)有限公司 | 升级控制方法及装置 |
CN106484617A (zh) * | 2016-10-09 | 2017-03-08 | 武汉斗鱼网络科技有限公司 | 用于Windows软件产品的dump文件自动分析统计方法及*** |
CN106649089A (zh) * | 2016-10-09 | 2017-05-10 | 武汉斗鱼网络科技有限公司 | 一种程序崩溃分析方法及*** |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110768875A (zh) * | 2019-12-27 | 2020-02-07 | 北京安博通科技股份有限公司 | 一种基于dns学习的应用识别方法及*** |
CN111898345A (zh) * | 2020-07-24 | 2020-11-06 | 北京车和家信息技术有限公司 | 基于详细设计文档的数据处理方法和装置 |
CN113553211A (zh) * | 2021-09-23 | 2021-10-26 | 统信软件技术有限公司 | 一种核心转储文件的生成方法、计算设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN108170595B (zh) | 2021-03-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9588752B2 (en) | Performing unattended software installation | |
US8972967B2 (en) | Application packages using block maps | |
US8176408B2 (en) | Modularized web provisioning | |
CN104932926B (zh) | 智能操作***平台中实现设备与驱动动态匹配的***及方法 | |
CN105378655B (zh) | 用于目标和不存在的设备的驱动程序安装的方法 | |
CN107967135B (zh) | 计算引擎实现方法、电子装置及存储介质 | |
US8046692B2 (en) | User interface mapping modules to deployment targets | |
US20140359593A1 (en) | Maintaining known dependencies for updates | |
US11055180B2 (en) | Backup management of software environments in a distributed network environment | |
US20100250730A1 (en) | Automated license reconciliation for deployed applications | |
KR101682738B1 (ko) | 관리 시스템 확장성 | |
CN106126256B (zh) | 一种驱动管理方法、装置及*** | |
US8392904B2 (en) | Apparatus, system, and method for efficient code update | |
EP3398063B1 (en) | Controlled deployment of application feature | |
US9311107B2 (en) | Booting devices via the cloud | |
CN102736954B (zh) | 通过禁用应用来解决***退化 | |
CN110531993B (zh) | 软件安装方法、装置、设备及介质 | |
CN108170595A (zh) | 一种转储文件生成方法及数据探针的安装和卸载方法 | |
US10514940B2 (en) | Virtual application package reconstruction | |
US20160124757A1 (en) | Monitoring a mobile device application | |
CN106201595A (zh) | 一种应用程序的清理控制方法及装置 | |
US10296492B2 (en) | Database bulk load tool | |
CN104239104B (zh) | 卸载应用程序app的方法、装置和终端 | |
CN108228611A (zh) | 单据信息抄写方法和装置 | |
US9436538B2 (en) | Computer-readable recording medium, log acquisition device, and log acquisition method |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |