本發(fā)明涉及計算機(jī)信息處理技術(shù)領(lǐng)域,具體涉及一種程序崩潰分析方法及系統(tǒng)。
背景技術(shù):
隨著計算機(jī)應(yīng)用的發(fā)展,滿足用戶各種計算機(jī)應(yīng)用程序?qū)映霾桓F。然而,應(yīng)用程序運(yùn)行過程中,有時會發(fā)生程序崩潰的現(xiàn)象,無論是指針越界還是非法操作,都將給系統(tǒng)造成巨大的損失。但在一個大型系統(tǒng)的測試過程中,初期出現(xiàn)程序崩潰似乎成了不可避免的事。
因此,亟需一種在應(yīng)用程序發(fā)生崩潰的時候記錄下產(chǎn)品崩潰的原因,以方便產(chǎn)品開發(fā)人員及時定位到程序的出錯的代碼,提高代碼的質(zhì)量及產(chǎn)品的穩(wěn)定性的技術(shù)方案。
技術(shù)實現(xiàn)要素:
針對現(xiàn)有技術(shù)中存在的缺陷,本發(fā)明的目的在于提供一種程序崩潰分析方法及系統(tǒng),可便捷的抓取應(yīng)用程序的崩潰信息生成dump文件并上傳至服務(wù)器進(jìn)行分析。
為達(dá)到以上目的,本發(fā)明采取的技術(shù)方案是:一種程序崩潰分析方法,其特征在于:在應(yīng)用程序中集成breakpad工具,在應(yīng)用程序發(fā)生崩潰時,使用breakpad工具抓取應(yīng)用程序崩潰信息,生成轉(zhuǎn)儲dump文件并寫入指定的目錄下,再將dump文件上傳至服務(wù)器。
在上述技術(shù)方案的基礎(chǔ)上,將dump文件上傳至服務(wù)器后,獲取應(yīng)用程序用到的所有共享庫so文件的符號文件;分析dump文件,得到產(chǎn)生崩潰的原因,出錯的代碼,調(diào)用的函數(shù);通過出錯的代碼和調(diào)用的函數(shù)查找符號文件獲得出錯的代碼對應(yīng)的原始代碼行號和原始代碼文件。
在上述技術(shù)方案的基礎(chǔ)上,所述符號文件包括函數(shù)名,原始代碼行號和原始代碼文件名。
在上述技術(shù)方案的基礎(chǔ)上,在應(yīng)用程序中集成breakpad工具時,預(yù)定義dump文件存放的目錄。
在上述技術(shù)方案的基礎(chǔ)上,所述breakpad工具抓取應(yīng)用程序崩潰信息生成轉(zhuǎn)儲dump文件并寫入指定的目錄下。
在上述技術(shù)方案的基礎(chǔ)上,使用網(wǎng)絡(luò)套接字將dump文件上傳到服務(wù)器。
本發(fā)明還公開了一種程序崩潰分析系統(tǒng),包括:
breakpad集成模塊,用于在應(yīng)用程序中集成breakpad工具:
轉(zhuǎn)儲文件生成模塊,用于在應(yīng)用程序發(fā)生崩潰時,找到出錯的代碼,生成dump文件并寫入指定的目錄下;
轉(zhuǎn)儲文件上傳模塊,用于將dump文件上傳至服務(wù)器。
在上述技術(shù)方案的基礎(chǔ)上,breakpad集成模塊還用于預(yù)定義dump文件存放的目錄。
在上述技術(shù)方案的基礎(chǔ)上,所述程序崩潰分析系統(tǒng)還包括:
符號文件生成模塊,用于獲取應(yīng)用程序用到的所有so文件的符號文件;
轉(zhuǎn)儲文件分析模塊,用于分析dump文件,得到產(chǎn)生崩潰的原因和得到函數(shù)調(diào)用鏈,通過符號文件獲得出錯的代碼對應(yīng)的的原始代碼行號和原始代碼文件。
在上述技術(shù)方案的基礎(chǔ)上,所述符號文件包括函數(shù)名,原始代碼行號和原始代碼文件名。
與現(xiàn)有技術(shù)相比,本發(fā)明的優(yōu)點在于:
1、本發(fā)明通過將在應(yīng)用程序中集成breakpad工具,在應(yīng)用程序發(fā)生崩潰時,使用breakpad工具找到出錯的代碼,生成dump文件并寫入指定的目錄下,再將dump文件上傳至服務(wù)器,即可將所有出錯的代碼收集并上傳至服務(wù)器分析。
2、本文通過在應(yīng)用程序中集成breakpad工具,獲取應(yīng)用程序用到的所有so文件的符號文件;分析dump文件,得到產(chǎn)生崩潰的原因和得到函數(shù)調(diào)用鏈,再通過符號文件獲得出錯的代碼對應(yīng)的的原始代碼行號和原始代碼文件,比較方便的就能找到產(chǎn)生崩潰的原因了。極大的節(jié)省了人力成本,也能夠及時的分析dump文件及早的發(fā)現(xiàn)問題。
附圖說明
圖1為本發(fā)明實施例中一種程序崩潰分析方法的流程示意圖;
圖2為本發(fā)明實施例中一種程序崩潰分析系統(tǒng)的結(jié)構(gòu)示意圖。
圖中:1-breakpad集成模塊,2-轉(zhuǎn)儲文件生成模塊,3-轉(zhuǎn)儲文件上傳模塊,4-符號文件生成模塊,5-轉(zhuǎn)儲文件分析模塊。
具體實施方式
以下結(jié)合附圖及實施例對本發(fā)明作進(jìn)一步詳細(xì)說明。
參見圖1所示,本發(fā)明實施例提供一種程序崩潰分析方法,在應(yīng)用程序中集成breakpad工具,breakpad工具即Google breakpad是一個非常實用的跨平臺的崩潰轉(zhuǎn)儲和分析模塊。
在應(yīng)用程序中集成breakpad工具,在應(yīng)用程序發(fā)生崩潰時,使用breakpad工具抓取應(yīng)用程序崩潰信息,生成轉(zhuǎn)儲dump文件并寫入指定的目錄下,再將dump文件上傳至服務(wù)器。即可將所有出錯的代碼收集并上傳至服務(wù)器分析。breakpad工具用于抓取應(yīng)用程序的崩潰。Dump文件是進(jìn)程的內(nèi)存鏡像??梢园殉绦虻膱?zhí)行狀態(tài)通過調(diào)試器保存到dump文件中。Dump文件是用來給驅(qū)動程序編寫人員調(diào)試驅(qū)動程序用的,這種文件必須用專用工具軟件打開,比如使用WinDbg打開。
在應(yīng)用程序中集成breakpad工具時,預(yù)定義dump文件存放的目錄。breakpad工具包括庫文件libbreakpad_client.a,breakpad工具抓取應(yīng)用程序崩潰信息生成轉(zhuǎn)儲dump文件并寫入指定的目錄下。
將dump文件上傳至服務(wù)器后,獲取應(yīng)用程序用到的所有共享庫so文件的符號文件;分析dump文件,得到產(chǎn)生崩潰的原因,出錯的代碼,調(diào)用的函數(shù);通過出錯的代碼和調(diào)用的函數(shù)查找符號文件獲得出錯的代碼對應(yīng)的原始代碼行號和原始代碼文件,比較方便的就能找到產(chǎn)生崩潰的原因了,極大的節(jié)省了人力成本,也能夠及時的分析dump文件及早的發(fā)現(xiàn)問題。本發(fā)明可應(yīng)用于安卓系統(tǒng)。
具體步驟參見圖1所示:
S1,在應(yīng)用程序中集成breakpad工具;
由于breakpad是開源的并且提供了庫文件libbreakpad_client.a,所以在應(yīng)用程序中集成libbreakpad_client.a就可以集成進(jìn)dump文件抓取功能,并且在應(yīng)用程序入口處添加如下代碼:
MinidumpDescriptor des("/sdcard");
ExceptionHandler eh(des,NULL,NULL,NULL,true,-1);
其中des對象是描述生成的dump文件存放的地址,本實施例中的是存放在sdcard中
其中eh對象是用來注冊一個異常的接管,用于在程序發(fā)生崩潰的時候,可以去接管異常,生成dump文件。
其中第一個參數(shù)NULL指不注冊過濾回調(diào)函數(shù)。
其中第二個參數(shù)NULL指不注冊創(chuàng)建dump時的回調(diào)函數(shù)。
其中第三個參數(shù)NULL指dump回調(diào)函數(shù)的環(huán)境變量,由于不需要所以為NULL。
其中第四個參數(shù)true標(biāo)示是注冊異常接管對象。
其中第五個參數(shù)-1標(biāo)示指抓取本應(yīng)用的崩潰。
S2,在應(yīng)用程序發(fā)生崩潰時,使用breakpad工具抓取應(yīng)用程序崩潰信息,生成轉(zhuǎn)儲(dump)文件并寫入指定的目錄下;
發(fā)生崩潰時,breakpad會在指定的目錄下寫入dump文件,本實施例中是對應(yīng)上面的des所填的sdcard目錄下。
S3,將dump文件上傳至服務(wù)器;
可以使用網(wǎng)絡(luò)套接字將dump文件上傳到服務(wù)器。
S4,獲取應(yīng)用程序用到的所有so文件的符號文件;
使用breakpad提供的dump_syms工具獲取so的符號文件。
運(yùn)行dump_syms libxxx.so>libxxx.so.sym
其中l(wèi)ibxxx.so指應(yīng)用中用到的so文件,libxxx.so.sym指生成的符號文件的名字,這樣對所有的so文件執(zhí)行上面的命令就可以得到所有so文件的符號文件。
S5,分析dump文件,得到產(chǎn)生崩潰的原因,出錯的代碼,調(diào)用的函數(shù);通過出錯的代碼和調(diào)用的函數(shù)查找符號文件獲得出錯的代碼對應(yīng)的的原始代碼行號和原始代碼文件。使用breakpad提供的minidump_stackwalk工具分析dump。
minidump_stackwalk xxx.dmp symbolspath>xxx.dmp.txt;
其中xxx.dmp是指dump文件名;
其中symbolspath是指符號文件所在的路徑;
其中xxx.dmp.txt是指dump分析后的結(jié)果文件;即dump分析后的結(jié)果文件為txt文件,可讀性更強(qiáng);解決了dump文件作為google的breakpad工具自定義的一種格式文件,只能通過google提供的工具才能解析dump文件的內(nèi)容,可讀性不強(qiáng)的缺陷。
可以使用上面的命令對所有的dump文件進(jìn)行分析,得到分析后的結(jié)果文件就可以定位到崩潰代碼所對應(yīng)的原始代碼行號,比較方便的定位到bug的原因。
參見圖2所示,本發(fā)明還公開了一種程序崩潰分析系統(tǒng),包括:
breakpad集成模塊1,用于在應(yīng)用程序中集成breakpad工具:breakpad工具包括庫文件libbreakpad_client.a。breakpad工具抓取應(yīng)用程序崩潰信息生成轉(zhuǎn)儲dump文件并寫入指定的目錄下。
轉(zhuǎn)儲文件生成模塊2,用于在應(yīng)用程序發(fā)生崩潰時,找到出錯的代碼,生成dump文件并寫入指定的目錄下;
轉(zhuǎn)儲文件上傳模塊3,用于將dump文件上傳至服務(wù)器。
程序崩潰分析系統(tǒng)還包括:
符號文件生成模塊4,用于獲取應(yīng)用程序用到的所有so文件的符號文件;符號文件包括函數(shù)名,原始代碼行號和原始代碼文件名。
轉(zhuǎn)儲文件分析模塊5,用于分析dump文件,得到產(chǎn)生崩潰的原因和得到函數(shù)調(diào)用鏈,通過符號文件獲得出錯的代碼對應(yīng)的的原始代碼行號和原始代碼文件。
本發(fā)明不局限于上述實施方式,對于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以做出若干改進(jìn)和潤飾,這些改進(jìn)和潤飾也視為本發(fā)明的保護(hù)范圍之內(nèi)。本說明書中未作詳細(xì)描述的內(nèi)容屬于本領(lǐng)域?qū)I(yè)技術(shù)人員公知的現(xiàn)有技術(shù)。