欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

用于Windows軟件產(chǎn)品的dump文件自動分析統(tǒng)計方法及系統(tǒng)與流程

文檔序號:12176854閱讀:494來源:國知局
用于Windows軟件產(chǎn)品的dump文件自動分析統(tǒng)計方法及系統(tǒng)與流程

本發(fā)明涉及Windows軟件產(chǎn)品的錯誤分析領(lǐng)域,具體來講是一種用于Windows軟件產(chǎn)品的dump文件自動分析統(tǒng)計方法及系統(tǒng)。



背景技術(shù):

現(xiàn)在很多軟件產(chǎn)品,例如Windows系統(tǒng)的軟件產(chǎn)品,為了提高用戶口碑,追求產(chǎn)品的穩(wěn)定性,希望在產(chǎn)品發(fā)生崩潰時記錄下產(chǎn)品崩潰時的運行環(huán)境以及崩潰的原因,更希望能根據(jù)崩潰的原因按照崩潰次數(shù)進行排序,以方便產(chǎn)品開發(fā)人員及時定位到程序的bug(漏洞)及優(yōu)先定位崩潰量比較大的bug,以提高代碼的質(zhì)量及產(chǎn)品的穩(wěn)定性。

目前,在Windows系統(tǒng)中,通常采用獲取用于記錄錯誤信息的dump文件(一種轉(zhuǎn)儲文件,是Windows系統(tǒng)下在應(yīng)用程序崩潰時,抓取應(yīng)用程序崩潰時的運行環(huán)境及崩潰的原因,用于定位應(yīng)用程序崩潰的原因),并將dump文件上傳至Windows系統(tǒng)軟件產(chǎn)品的服務(wù)器進行分析,來實現(xiàn)對產(chǎn)品的所有錯誤的收集和處理。

但在實際操作中,收集大量的dump文件后,需要人力分析dump文件,同時也需要人力對產(chǎn)品崩潰原因進行分類統(tǒng)計。而全由人工采用手動進行分析統(tǒng)計等,往往帶有較大程度的主觀性,使得分析、統(tǒng)計標(biāo)準不統(tǒng)一;另外,在海量數(shù)據(jù)的場景下,dump文件信息數(shù)據(jù)往往維度多、數(shù)據(jù)量大,靠人工進行分析、統(tǒng)計往往不準確、覆蓋率也不夠高、重復(fù)性的工作也容易導(dǎo)致失誤,而且人工操作時間較長,效率較低,人力成本較大。



技術(shù)實現(xiàn)要素:

本發(fā)明的目的是為了克服上述背景技術(shù)的不足,提供一種用于Windows軟件產(chǎn)品的dump文件自動分析統(tǒng)計方法及系統(tǒng),能對生成的dump文件進行自動分析和自動分類統(tǒng)計,不但準確、高效、及時性強,而且能極大的節(jié)省人力成本,滿足使用需求。

為達到以上目的,本發(fā)明提供一種用于Windows軟件產(chǎn)品的dump文件自動分析統(tǒng)計方法,包括以下步驟:步驟S1:在客戶端的Windows軟件產(chǎn)品中集成用于實現(xiàn)dump抓取功能的函數(shù),轉(zhuǎn)入步驟S2;步驟S2:當(dāng)客戶端的Windows軟件產(chǎn)品的程序發(fā)生崩潰時,利用步驟S1中集成的函數(shù),生成寫有dump信息的dump文件,轉(zhuǎn)入步驟S3;步驟S3:將生成的dump文件上傳到服務(wù)器端,轉(zhuǎn)入步驟S4;步驟S4:服務(wù)器端利用Windows提供的自動分析工具對上傳的dump文件進行分析,提取出所述dump信息,并生成分析結(jié)果文件,該分析結(jié)果文件中包括函數(shù)調(diào)用鏈信息,轉(zhuǎn)入步驟S5;步驟S5:服務(wù)器端對分析結(jié)果文件中的函數(shù)調(diào)用鏈信息進行分類統(tǒng)計,統(tǒng)計出計數(shù)最高的導(dǎo)致錯誤的起始調(diào)用函數(shù);并根據(jù)所述起始調(diào)用函數(shù)定位出代碼中的bug,結(jié)束。

本發(fā)明還提供一種用于Windows軟件產(chǎn)品的dump文件自動分析統(tǒng)計系統(tǒng),包括設(shè)置于客戶端的函數(shù)集成模塊、dump文件生成模塊、dump文件上傳模塊;以及設(shè)置于服務(wù)器端的dump文件分析模塊、分析結(jié)果統(tǒng)計模塊;

所述函數(shù)集成模塊用于:在Windows軟件產(chǎn)品中集成用于實現(xiàn)dump抓取功能的函數(shù);所述dump文件生成模塊用于:當(dāng)Windows軟件產(chǎn)品的程序發(fā)生崩潰時,利用函數(shù)集成模塊集成的函數(shù),生成寫有dump信息的dump文件;所述dump文件上傳模塊用于:將dump文件上傳到服務(wù)器端;所述dump文件分析模塊用于:利用Windows提供的自動分析工具對上傳的dump文件進行分析,提取出dump信息,并生成分析結(jié)果文件,該分析結(jié)果文件中包括函數(shù)調(diào)用鏈信息;所述分析結(jié)果統(tǒng)計模塊用于:對分析結(jié)果文件中的函數(shù)調(diào)用鏈信息進行分類統(tǒng)計,統(tǒng)計出計數(shù)最高的導(dǎo)致錯誤的起始調(diào)用函數(shù);并根據(jù)所述起始調(diào)用函數(shù)定位出代碼中的bug。

本發(fā)明的有益效果在于:

本發(fā)明提供了一種用于Windows軟件產(chǎn)品的dump文件自動分析統(tǒng)計方法,能在客戶端中集成用于實現(xiàn)dump抓取功能的函數(shù);當(dāng)客戶端的Windows軟件產(chǎn)品的程序發(fā)生崩潰時,利用集成的函數(shù)能生成寫有dump信息的dump文件;將生成的dump文件上傳到服務(wù)器端后,服務(wù)器端能利用Windows提供的自動分析工具對上傳的dump文件進行分析,提取出所述dump信息,并生成分析結(jié)果文件;對分析結(jié)果文件中的函數(shù)調(diào)用鏈信息進行分類統(tǒng)計,統(tǒng)計出計數(shù)最高的導(dǎo)致錯誤的起始調(diào)用函數(shù)后,能根據(jù)該起始調(diào)用函數(shù)定位出代碼中的bug。與現(xiàn)有技術(shù)相比,本發(fā)明能對生成的dump文件進行自動分析和自動分類統(tǒng)計,從而快速發(fā)現(xiàn)和定位錯誤,不但準確、高效、及時性強,而且能極大的節(jié)省人力成本,提高了軟件產(chǎn)品質(zhì)量,滿足使用需求,用戶體驗佳。

附圖說明

圖1為本發(fā)明實施例中用于Windows軟件產(chǎn)品的dump文件自動分析統(tǒng)計方法的流程圖;

圖2為本發(fā)明實施例中用于Windows軟件產(chǎn)品的dump文件自動分析統(tǒng)計系統(tǒng)的結(jié)構(gòu)框圖。

具體實施方式

下面結(jié)合附圖及具體實施例對本發(fā)明作進一步的詳細描述。

參見圖1所示,本發(fā)明實施例提供一種用于Windows軟件產(chǎn)品的dump文件自動分析統(tǒng)計方法,包括以下步驟:

步驟S1:在客戶端的Windows軟件產(chǎn)品中集成用于實現(xiàn)dump抓取功能的函數(shù),轉(zhuǎn)入步驟S2。

可以理解的是,本實施例中,用于實現(xiàn)dump抓取功能的函數(shù)包括:異常處理設(shè)置函數(shù)SetUnhandledExceptionFilter、異常處理函數(shù)lpExceptionFunc、文件生成函數(shù)CreateFile和dump信息寫入函數(shù)MiniDumpWriteDump。在此基礎(chǔ)上,步驟S1具體包括以下流程:

步驟S101:將Windows系統(tǒng)API(Application Programming Interface,應(yīng)用編程接口)函數(shù)中的異常處理設(shè)置函數(shù)SetUnhandledExceptionFilter集成到客戶端的Windows軟件產(chǎn)品的程序中;并將所述異常處理設(shè)置函數(shù)SetUnhandledExceptionFilter的調(diào)用參數(shù)設(shè)置為異常處理函數(shù)lpExceptionFunc,轉(zhuǎn)入步驟S102。

通過此步驟的操作,可使客戶端系統(tǒng)發(fā)生錯誤時,自動調(diào)用異常處理設(shè)置函數(shù)SetUnhandledExceptionFilter來設(shè)置異常處理函數(shù)lpExceptionFunc。該異常處理設(shè)置函數(shù)SetUnhandledExceptionFilter是在程序發(fā)生錯誤最后接管程序的地方,且其調(diào)用函數(shù)為異常處理函數(shù)lpExceptionFunc,所以,當(dāng)錯誤發(fā)生時會去調(diào)用異常處理函數(shù)lpExceptionFunc,從而將執(zhí)行流程轉(zhuǎn)入到異常處理函數(shù)lpExceptionFunc中。具體的實現(xiàn)代碼如下:

LPTOP_LEVEL_EXCEPTION_FILTER

SetUnhandledExceptionFilter(LPTOP_LEVEL_EXCEPTION_FILTER lpExceptionFunc);

步驟S102:在異常處理函數(shù)lpExceptionFunc中,創(chuàng)建一個用于生成dump文件的文件生成函數(shù)CreateFile,轉(zhuǎn)入步驟S103。

具體來說,所述文件生成函數(shù)CreateFile包括以下內(nèi)容:

HANDLE WINAPI CreateFile(

LPCTSTR lpFileName,

DWORD dwDesiredAccess,

DWORD dwShareMode,

LPSECURITY_ATTRIBUTES lpSecurityAttributes,

DWORD dwCreationDisposition,

DWORD dwFlagsAndAttributes,

HANDLE hTemplateFile

);

其中,參數(shù)lpFileName是最終保存在磁盤的dump的文件名;

參數(shù)dwDesiredAccess傳入GENERIC_WRITE,表示寫入文件;

參數(shù)dwShareMode傳入0,表示獨占的方式寫入;

參數(shù)lpSecurityAttributes傳入NULL,表示不考慮安全屬性;

參數(shù)dwCreationDisposition傳入CREATE_ALWAYS,表示總是創(chuàng)建;

參數(shù)dwFlagsAndAttributes傳入FILE_ATTRIBUTE_NORMAL,表示為普通文件;

參數(shù)hTemplateFile傳入空,表示不是復(fù)制文件句柄。

步驟S103:將Windows系統(tǒng)API函數(shù)中的dump信息寫入函數(shù)MiniDumpWriteDump集成到當(dāng)前Windows軟件產(chǎn)品的程序中,該dump信息寫入函數(shù)MiniDumpWriteDump用于向生成的dump文件中寫入dump信息。

具體來說,所述dump信息寫入函數(shù)MiniDumpWriteDump包括以下內(nèi)容:

其中,參數(shù)hProcess傳入當(dāng)前進程的句柄;

參數(shù)ProcessId傳入當(dāng)前進程的id;

參數(shù)hFile傳入上面調(diào)用CreateFile返回的文件句柄;

參數(shù)DumpType傳入MiniDumpNormal,表示抓取的信息不包含整個內(nèi)存信息;

參數(shù)ExceptionParam傳入MINIDUMP_EXCEPTION_INFORMA TION的對象;

參數(shù)UserStreamParam傳入NULL,表示為空;

參數(shù)CallbackParam傳入NULL,表示為空。

步驟S2:當(dāng)客戶端的Windows軟件產(chǎn)品的程序發(fā)生崩潰(或異常)時,利用步驟S1中集成的函數(shù),生成寫有dump信息的dump文件,轉(zhuǎn)入步驟S3;其中,所述dump信息包括:程序出錯的原因,出錯的源代碼的所在文件的行號,程序出錯時的函數(shù)調(diào)用鏈信息,調(diào)用的函數(shù)名字和源代碼文件名等。

實際操作時,步驟S2具體包括以下流程:

當(dāng)客戶端的Windows軟件產(chǎn)品的程序發(fā)生崩潰時,Windows系統(tǒng)會調(diào)用異常處理設(shè)置函數(shù)SetUnhandledExceptionFilter設(shè)置的異常處理函數(shù)lpExceptionFunc;異常處理函數(shù)lpExceptionFunc會調(diào)用文件生成函數(shù)CreateFile創(chuàng)建一個dump文件;再通過調(diào)用dump信息寫入函數(shù)MiniDumpWriteDump將所述dump信息寫入dump文件中,從而生成寫有dump信息的dump文件。

步驟S3:將生成的dump文件上傳到服務(wù)器端,轉(zhuǎn)入步驟S4。具體操作時,可使用網(wǎng)絡(luò)套接字將生成的dump文件上傳到服務(wù)器端。

步驟S4:服務(wù)器端利用Windows提供的自動分析工具對上傳的dump文件進行分析,提取出所述dump信息,并生成分析結(jié)果文件,該分析結(jié)果文件中包括函數(shù)調(diào)用鏈信息且該文件格式為TXT文件,轉(zhuǎn)入步驟S5。

本實施例中,服務(wù)器端利用的自動分析工具是Windows提供的cdb程序工具(即cdb.exe)。該cdb程序工具是Windows提供的一個用來分析dump文件的工具,通過命令行的方式來運行,通過命令行參數(shù)來指定cdb分析的文件,及分析的命令。

具體來說,命令.ecxr可以讓cdb程序來讀取dump文件中程序出錯的原因;命令kb可以讓cdb程序來讀取dump文件中程序崩潰時的函數(shù)調(diào)用鏈信息。有了出錯的原因可以馬上知道程序為什么出錯,有了函數(shù)調(diào)用鏈信息可以知道出錯的位置是從應(yīng)用程序的那個函數(shù)調(diào)用開始的。

實際操作時,cdb程序工具的調(diào)用方式如下:

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

其中,SymbolPath是應(yīng)用程序編譯時生成的PDB(Program Database File,程序數(shù)據(jù)庫文件);Windows提供PDB文件是用來幫助軟件的調(diào)試的,生成應(yīng)用程序的時候就會自動生成;

ImagePath是應(yīng)用程序EXE的路徑;

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

ResultFileName是分析結(jié)果的保存文件名;

".ecxr;kb;q"是cdb的命令,包括分析出錯原因和調(diào)用鏈,以及退出程序。

通過調(diào)用上述命令等則可獲取到相應(yīng)的dump信息,從而生成分析結(jié)果文件。

步驟S5:服務(wù)器端對分析結(jié)果文件中的函數(shù)調(diào)用鏈信息進行分類統(tǒng)計,統(tǒng)計出計數(shù)最高的導(dǎo)致錯誤的起始調(diào)用函數(shù);并根據(jù)該起始調(diào)用函數(shù)定位出代碼中的bug,結(jié)束。

可以理解的是,本發(fā)明的函數(shù)調(diào)用鏈信息其實就是函數(shù)調(diào)用的層級信息,由于該層級信息可能有多數(shù)層級,因此,為了高效、準確的進行分類統(tǒng)計,本發(fā)明在對分析結(jié)果文件中的函數(shù)調(diào)用鏈信息進行分類統(tǒng)計時,是對指定的調(diào)用鏈層級數(shù)的內(nèi)容進行分類統(tǒng)計的,若指定的調(diào)用鏈層級數(shù)大于實際的調(diào)用鏈層級數(shù),則是對實際的調(diào)用鏈層級數(shù)的內(nèi)容進行分類統(tǒng)計。例如,指定的調(diào)用鏈層級數(shù)為5層,而實際的函數(shù)調(diào)用鏈只有3層,則分類統(tǒng)計時只統(tǒng)計3層的內(nèi)容。所述指定的調(diào)用鏈層級數(shù)是一個經(jīng)驗值,通常指定為5層~10層,具體數(shù)值可以依據(jù)各個軟件具體情況而定。

進一步的,實際操作中,所述分析結(jié)果文件中還可以包含出錯的原因信息,則步驟S5在對分析結(jié)果文件中的函數(shù)調(diào)用鏈信息進行分類統(tǒng)計時,可結(jié)合該出錯的原因信息進行有效的分類統(tǒng)計,可幫助快速的定位bug。

本發(fā)明中,通過對函數(shù)調(diào)用鏈信息進行分類統(tǒng)計,找到起始調(diào)用函數(shù)并最終定位出bug的原理分析如下:

從步驟S4得到了分析結(jié)果文件后,該分析結(jié)果文件中會有發(fā)生錯誤時的函數(shù)調(diào)用鏈信息(就是函數(shù)調(diào)用的層級信息,可以知道從哪個起始函數(shù)調(diào)用出錯的),通過對該函數(shù)調(diào)用鏈信息進行分類統(tǒng)計就可以獲取到最終導(dǎo)致錯誤的起始調(diào)用函數(shù)(起始調(diào)用函數(shù)是指導(dǎo)致錯誤代碼發(fā)生的最早的調(diào)用函數(shù)),通過該起始調(diào)用函數(shù)可以發(fā)現(xiàn)代碼中的bug,因為出錯時要么就是在底層函數(shù)出錯,要么是在當(dāng)前代碼出錯,如果是底層代碼出錯只有通過尋找最上層的調(diào)用函數(shù)才能找到bug,如果是在當(dāng)前層出錯則當(dāng)前層就是調(diào)用函數(shù),如果是同樣的錯誤那么其調(diào)用鏈會是一樣的,找到的調(diào)用函數(shù)也是會是一樣的,所以本發(fā)明通過統(tǒng)計指定層級數(shù)的函數(shù)調(diào)用鏈,就能追尋到導(dǎo)致錯誤的起始調(diào)用函數(shù),從而定位出bug。

下面舉一例來對上述分類統(tǒng)計的實際過程進行詳細說明。假設(shè)在分析在分析結(jié)果文件中,會有這樣一行信息:

ChildEBP RetAddr Args to Child,則這行信息代表接下來是顯示所有的調(diào)用鏈。其中,ChildEBP表示是CPU寄存器EBP(Extended Base Pointer,擴展基址指針寄存器)的值;RetAddr表示函數(shù)調(diào)用返回地址;Args to Child表示當(dāng)前調(diào)用函數(shù)的參數(shù);然后緊跟的是函數(shù)的具體名字。

假設(shè)一條調(diào)用鏈信息如下:

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

e:\douyutool\timerex.cpp

其中,douyuTool!TimerEx::TimerRoutine則是具體的調(diào)用函數(shù);

e:\douyutool\timerex.cpp對應(yīng)的則是具體代碼的源文件名字。

將douyuTool!TimerEx::TimerRoutine記錄下來算做是一個調(diào)用函數(shù),將多條調(diào)用函數(shù)的信息統(tǒng)計起來,如果一個分析結(jié)果文件中的統(tǒng)計的5層的調(diào)用鏈的函數(shù)是一樣的,說明錯誤是一樣的,對一樣的進行計數(shù),不一樣的則分別計數(shù),如果統(tǒng)計的計數(shù)最高的則說明發(fā)生此類錯誤是最多的,可以優(yōu)先定位此類錯誤,解決發(fā)生bug最多的地方,提高軟件質(zhì)量。

參見圖2所示,本發(fā)明實施例還提供一種用于Windows軟件產(chǎn)品的dump文件自動分析統(tǒng)計系統(tǒng),包括設(shè)置于客戶端的函數(shù)集成模塊、dump文件生成模塊、dump文件上傳模塊;以及設(shè)置于服務(wù)器端的dump文件分析模塊、分析結(jié)果統(tǒng)計模塊。

其中,函數(shù)集成模塊用于:在Windows軟件產(chǎn)品中集成用于實現(xiàn)dump抓取功能的函數(shù);其具體流程為:將Windows系統(tǒng)API函數(shù)中的異常處理設(shè)置函數(shù)集成到客戶端的Windows軟件產(chǎn)品的程序中,并將所述異常處理設(shè)置函數(shù)的調(diào)用參數(shù)設(shè)置為異常處理函數(shù);在異常處理函數(shù)中,創(chuàng)建一個用于生成dump文件的文件生成函數(shù);將Windows系統(tǒng)API函數(shù)中的dump信息寫入函數(shù)集成到客戶端的Windows軟件產(chǎn)品的程序中。

dump文件生成模塊用于:當(dāng)Windows軟件產(chǎn)品的程序發(fā)生崩潰時,利用函數(shù)集成模塊集成的函數(shù),生成寫有dump信息的dump文件;其具體流程為:當(dāng)Windows軟件產(chǎn)品的程序發(fā)生崩潰時,調(diào)用所述異常處理設(shè)置函數(shù)設(shè)置的異常處理函數(shù);所述異常處理函數(shù)會調(diào)用文件生成函數(shù)創(chuàng)建一個dump文件;再通過調(diào)用dump信息寫入函數(shù)將dump信息寫入dump文件中,生成寫有dump信息的dump文件。

dump文件上傳模塊用于:使用網(wǎng)絡(luò)套接字將dump文件上傳到服務(wù)器端。

dump文件分析模塊用于:利用Windows提供的自動分析工具對上傳的dump文件進行分析,提取出dump信息,并生成分析結(jié)果文件,該分析結(jié)果文件中包括函數(shù)調(diào)用鏈信息;本實施例中,上述自動分析工具為Windows提供的cdb程序工具。

分析結(jié)果統(tǒng)計模塊用于:對分析結(jié)果文件中的函數(shù)調(diào)用鏈信息進行分類統(tǒng)計,統(tǒng)計出計數(shù)最高的導(dǎo)致錯誤的起始調(diào)用函數(shù);并根據(jù)所述起始調(diào)用函數(shù)定位出代碼中的bug。本實施例中,分析結(jié)果統(tǒng)計模塊對分析結(jié)果文件中的函數(shù)調(diào)用鏈信息進行分類統(tǒng)計時,是對指定的調(diào)用鏈層級數(shù)的內(nèi)容進行分類統(tǒng)計;若指定的調(diào)用鏈層級數(shù)大于實際的調(diào)用鏈層級數(shù),則是對實際的調(diào)用鏈層級數(shù)的內(nèi)容進行分類統(tǒng)計。

需要說明的是:上述實施例提供的系統(tǒng)在進行操作時,僅以上述各功能模塊的劃分進行舉例說明,實際應(yīng)用中,可以根據(jù)需要而將上述功能分配由不同的功能模塊完成,即將系統(tǒng)的內(nèi)部結(jié)構(gòu)劃分成不同的功能模塊,以完成以上描述的全部或者部分功能。

本發(fā)明不局限于上述實施方式,對于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以做出若干改進和潤飾,這些改進和潤飾也視為本發(fā)明的保護范圍之內(nèi)。

本說明書中未作詳細描述的內(nèi)容屬于本領(lǐng)域?qū)I(yè)技術(shù)人員公知的現(xiàn)有技術(shù)。

當(dāng)前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
乐昌市| 博爱县| 西吉县| 新干县| 田东县| 碌曲县| 襄汾县| 广饶县| 古蔺县| 永平县| 炉霍县| 同心县| 讷河市| 黄大仙区| 邹城市| 兴国县| 定兴县| 屏东县| 金山区| 泽州县| 韶关市| 塘沽区| 惠来县| 蒙山县| 绵竹市| 平南县| 乌拉特中旗| 毕节市| 湖南省| 徐水县| 衡阳市| 彩票| 汉川市| 民县| 达日县| 左贡县| 乌兰察布市| 三江| 吉首市| 深泽县| 双牌县|