本發(fā)明涉及存儲(chǔ)的領(lǐng)域,尤其涉及一種基于be的程序崩潰的分析方法及系統(tǒng)。
背景技術(shù):
目前,存儲(chǔ)設(shè)備從單一磁盤向智能化存儲(chǔ)設(shè)備轉(zhuǎn)變,隨著對智能化存儲(chǔ)設(shè)備新的功能的開發(fā),需要更加復(fù)雜的程序,在運(yùn)行的過程中難免會(huì)出現(xiàn)程度崩盤的現(xiàn)象。應(yīng)用程序的崩盤會(huì)導(dǎo)致業(yè)務(wù)的暫停,而且導(dǎo)致程序崩盤的原因有很多,可能是指針的非法操作,也或者程序邏輯的問題,因此,需要了解程序崩盤的原因,進(jìn)而解決程序崩盤的問題。
技術(shù)實(shí)現(xiàn)要素:
有鑒于此,本發(fā)明實(shí)施例提供了一種基于be的程序崩潰的分析方法及系統(tǒng),通過本實(shí)施例的方法及系統(tǒng),可以還原程序崩盤時(shí)的數(shù)據(jù)結(jié)構(gòu),并且,通過be的方式對dump文件進(jìn)行解析,得到的解析結(jié)果是以目錄的形式存在的,方便用戶查看業(yè)務(wù)程序崩潰的原因。
本發(fā)明實(shí)施例提供的一種基于be的程序崩潰的分析方法,所述方法可以包括:
監(jiān)控正在運(yùn)行的業(yè)務(wù)程序;
若監(jiān)測到所述業(yè)務(wù)程序出現(xiàn)崩潰的情況,將所述業(yè)務(wù)程序崩潰時(shí)的內(nèi)存映像以dump文件的形式進(jìn)行保存;
通過be二進(jìn)制編輯器,依據(jù)預(yù)設(shè)的符號文件和資源文件對所述dump文件進(jìn)行解析;其中,所述符號文件包括所述業(yè)務(wù)程序的全局變量的名稱和內(nèi)存地址,所述資源文件包括所述業(yè)務(wù)程序的結(jié)構(gòu)信息。
可選的,所述通過be二進(jìn)制編輯器,依據(jù)預(yù)設(shè)的符號文件和資源文件對所述dump文件進(jìn)行解析,包括:
通過be,依據(jù)所述符號文件中業(yè)務(wù)程序的全局變量的名稱和內(nèi)存地址,解析出所述dump文件中所述業(yè)務(wù)程序在崩潰時(shí)的變量信息;
通過be,依據(jù)所述資源文件中業(yè)務(wù)程序的結(jié)構(gòu)信息和所述業(yè)務(wù)程序在崩潰時(shí)的變量信息,還原所述業(yè)務(wù)程序在崩潰時(shí)的數(shù)據(jù)結(jié)構(gòu)。
可選的,生成所述資源文件的過程包括:
從所述業(yè)務(wù)程序的代碼中抽取所述業(yè)務(wù)程序的結(jié)構(gòu)信息;
將所述結(jié)構(gòu)信息保存為所述資源文件。
可選的,生成所述符號文件的過程包括:
依據(jù)所述業(yè)務(wù)程序生成elf可執(zhí)行文件;
從所述elf文件中,讀取出所述業(yè)務(wù)程序的全局變量的名稱和內(nèi)存地址;
將所述全局變量的名稱和內(nèi)存地址保存為所述符號文件。
本發(fā)明實(shí)施例提供的一種基于be的程序崩潰的分析系統(tǒng),所述系統(tǒng)包括:
監(jiān)控單元,用于監(jiān)控正在運(yùn)行的業(yè)務(wù)程序;
第一保存單元,用于若監(jiān)測到所述業(yè)務(wù)程序出現(xiàn)崩潰的情況,將所述業(yè)務(wù)程序崩潰時(shí)的內(nèi)存映像以dump文件的形式進(jìn)行保存;
解析單元,用于通過be二進(jìn)制編輯器,依據(jù)預(yù)設(shè)的符號文件和資源文件對所述dump文件進(jìn)行解析;其中,所述符號文件包括所述業(yè)務(wù)程序的全局變量的名稱和內(nèi)存地址,所述資源文件包括所述業(yè)務(wù)程序的結(jié)構(gòu)信息。
可選的,所述解析單元,包括:
解析子單元,用于通過be,依據(jù)所述符號文件中業(yè)務(wù)程序的全局變量的名稱和內(nèi)存地址,解析出所述dump文件中所述業(yè)務(wù)程序在崩潰時(shí)的變量信息;
還原子單元,用于通過be,依據(jù)所述資源文件中業(yè)務(wù)程序的結(jié)構(gòu)信息和所述業(yè)務(wù)程序在崩潰時(shí)的變量信息,還原所述業(yè)務(wù)程序在崩潰時(shí)的數(shù)據(jù)結(jié)構(gòu)。
可選的,還包括:
抽取單元,用于從所述業(yè)務(wù)程序的代碼中抽取所述業(yè)務(wù)程序的結(jié)構(gòu)信息;
第二保存單元,用于將所述結(jié)構(gòu)信息保存為所述資源文件。
可選的,還包括:
生成單元,用于依據(jù)所述業(yè)務(wù)程序生成elf可執(zhí)行文件;
讀取單元,用于從所述elf文件中,讀取出所述業(yè)務(wù)程序的全局變量的名稱和內(nèi)存地址;
第三保存單元,用于將所述全局變量的名稱和內(nèi)存地址保存為所述符號文件。
本發(fā)明實(shí)施例公開了一種基于be的程序崩潰的分析方法,監(jiān)控正在運(yùn)行的業(yè)務(wù)程序;若監(jiān)測到所述業(yè)務(wù)程序出現(xiàn)崩潰的情況,將所述業(yè)務(wù)程序崩潰時(shí)的內(nèi)存映像以dump文件的形式進(jìn)行保存;通過be二進(jìn)制編輯器,依據(jù)預(yù)設(shè)的符號文件和資源文件對所述dump文件進(jìn)行解析;其中,所述符號文件包括所述業(yè)務(wù)程序的全局變量的名稱和內(nèi)存地址,所述資源文件包括所述業(yè)務(wù)程序的結(jié)構(gòu)信息。因此,可以還原出該業(yè)務(wù)程序在崩潰時(shí)的數(shù)據(jù)結(jié)構(gòu),并且,通過be的方式對dump文件進(jìn)行解析,得到的解析結(jié)果是以目錄的形式存在的,方便用戶查看業(yè)務(wù)程序崩潰的原因。
附圖說明
為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)提供的附圖獲得其他的附圖。
圖1示出了本發(fā)明實(shí)施例提供的一種基于be的程序崩潰的分析方法的示意圖;
圖2示出了本發(fā)明實(shí)施例提供的一種基于be的程序崩潰的分析方法的流程示意圖;
圖3示出了本發(fā)明實(shí)施例提供的一種基于be的程序崩潰的分析系統(tǒng)的結(jié)構(gòu)示意圖。
具體實(shí)施方式
下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
發(fā)明人經(jīng)研究發(fā)現(xiàn),現(xiàn)有技術(shù)中,雖然存在一些分析程序崩潰的方法,但是一般情況下,用戶只可以查看到程序崩潰時(shí),內(nèi)核堆棧的調(diào)用信息,無法還原程序在崩潰時(shí)的數(shù)據(jù)結(jié)構(gòu),不方便用戶的查看程序崩潰的原因。
有鑒于此,如圖1所示,本發(fā)明實(shí)施例提供了一種基于be的程序崩潰分析方法,當(dāng)程序崩潰時(shí),該程序的內(nèi)存映像以dump文件的形式進(jìn)行保存,并通過已生成的符號文件和資源文件對dump進(jìn)行保存。解決了現(xiàn)有技術(shù)中,無法還原程序數(shù)據(jù)結(jié)構(gòu)的問題,并且,方便了用戶查詢程序崩潰的原因。
參考圖2,示出了本發(fā)明實(shí)施例提供的一種基于be的程序崩潰分析方法的流程示意圖,在本實(shí)施例中,所述方法可以包括:
s201:監(jiān)控正在運(yùn)行的業(yè)務(wù)程序;
本實(shí)施例中,存儲(chǔ)設(shè)備的軟件結(jié)構(gòu)可以包括兩部分:業(yè)務(wù)程序和輔助程序,其中業(yè)務(wù)程序負(fù)責(zé)程序的正常運(yùn)轉(zhuǎn),輔助程序負(fù)責(zé)對業(yè)務(wù)程序進(jìn)行監(jiān)控,監(jiān)控業(yè)務(wù)程序是否出現(xiàn)崩潰的情況。
s202:若監(jiān)測到所述業(yè)務(wù)程序出現(xiàn)崩潰的情況,將所述業(yè)務(wù)程序崩潰時(shí)的內(nèi)存映像以dump文件的形式保存;
本實(shí)施例中,可以通過linux內(nèi)核將業(yè)務(wù)程序崩潰時(shí)的內(nèi)存映像以dump文件的形式保存在磁盤中,或者也可以是通過plmm將業(yè)務(wù)程序崩潰時(shí)的內(nèi)存映像以dump文件的形式保存在磁盤中。其中,plmm是將linux內(nèi)核進(jìn)行二次封裝后得到的。
s203:通過be二進(jìn)制編輯器,依據(jù)預(yù)設(shè)的符號文件和資源文件對所述dump文件進(jìn)行解析;其中,所述符號文件包括所述業(yè)務(wù)程序的全局變量的名稱和內(nèi)存地址,所述資源文件包括所述業(yè)務(wù)程序的結(jié)構(gòu)信息。
舉例說明:對于c代碼來說,資源文件中的結(jié)構(gòu)信息為業(yè)務(wù)程序的結(jié)構(gòu)體;符號文件中的全局變量可以包括:全局變量名稱和全局變量存儲(chǔ)的內(nèi)存地址。
be(英文全稱:binaryeditor,中文全稱:二進(jìn)制編輯器)工具,是一種二進(jìn)制的編輯器,本實(shí)施例中,通過該be工具對dump文件進(jìn)行解析。
其中,對于符號文件和資源文件的生成具體可以包括:
對于符號文件:
從所述業(yè)務(wù)程序的代碼中抽取所述業(yè)務(wù)程序的結(jié)構(gòu)信息;
將所述結(jié)構(gòu)信息保存為所述資源文件。
對于資源文件:
依據(jù)所述業(yè)務(wù)程序生成elf可執(zhí)行文件;
從所述elf可執(zhí)行文件中,讀取所述業(yè)務(wù)程序的全局變量的名稱和內(nèi)存地址;
將所述全局變量的名稱和內(nèi)存地址保存為所述符號文件。
舉例說明:對于符號文件,子業(yè)務(wù)程序和輔助程序進(jìn)行編譯時(shí),可以通過gcc(英文全稱:gnucompilercollectio,中文全稱:gnu編譯器套件)對代碼進(jìn)行編譯,并鏈接到elf程序,生成elf可執(zhí)行文件,然后通過readelf讀取該elf程序的變量地址生成符號表。對于資源文件,可以通過awk從業(yè)務(wù)程序中抽取出資源文件。
具體的,s103可以包括:
通過be,依據(jù)所述符號文件中業(yè)務(wù)程序的全局變量的名稱和內(nèi)存地址,解析出所述dump文件中所述業(yè)務(wù)程序在崩潰時(shí)的變量信息;
通過be,依據(jù)所述資源文件中業(yè)務(wù)程序的結(jié)構(gòu)信息和所述業(yè)務(wù)程序在崩潰時(shí)的變量信息,還原所述業(yè)務(wù)程序在崩潰時(shí)的數(shù)據(jù)結(jié)構(gòu)。
其中,通過符號文件解析出的dump文件中的變量,可以是該業(yè)務(wù)程序崩潰時(shí)的正運(yùn)行的變量。
其中,通過資源文件和所述業(yè)務(wù)程序在崩潰時(shí)的變量信息,但是此時(shí)只知道該業(yè)務(wù)程序在崩潰時(shí)的變量名和變量地址,無法還原業(yè)務(wù)程序崩潰時(shí)的狀態(tài),因此,還需要通過資源文件中業(yè)務(wù)程序的結(jié)構(gòu)信息,還原該業(yè)務(wù)程序在崩潰時(shí)的數(shù)據(jù)結(jié)構(gòu)。
本實(shí)施例中,當(dāng)正在運(yùn)行的業(yè)務(wù)程序崩潰時(shí),將該業(yè)務(wù)程序崩潰時(shí)的內(nèi)存映像以dump文件的形式進(jìn)行保存,然后依據(jù)預(yù)設(shè)的符號文件和資源文件對dump文件進(jìn)行解析,從而還原出該業(yè)務(wù)程序在崩潰時(shí)的數(shù)據(jù)結(jié)構(gòu)。并且,通過be的方式對dump文件進(jìn)行解析,得到的解析結(jié)果是以目錄的形式存在的,方便用戶查看業(yè)務(wù)程序崩潰的原因。
參考圖3,示出了本發(fā)明實(shí)施例提供的一種基于be的程序崩潰的分析系統(tǒng)的結(jié)構(gòu)示意圖,在本實(shí)施例中,所述系統(tǒng)包括:
監(jiān)控單元301,用于監(jiān)控正在運(yùn)行的業(yè)務(wù)程序;
第一保存單元302,用于若監(jiān)測到所述業(yè)務(wù)程序出現(xiàn)崩潰的情況,將所述業(yè)務(wù)程序崩潰時(shí)的內(nèi)存映像以dump文件的形式進(jìn)行保存;
解析單元303,用于通過be二進(jìn)制編輯器,依據(jù)預(yù)設(shè)的符號文件和資源文件對所述dump文件進(jìn)行解析;其中,所述符號文件包括所述業(yè)務(wù)程序的全局變量的名稱和內(nèi)存地址,所述資源文件包括所述業(yè)務(wù)程序的結(jié)構(gòu)信息。
可選的,所述解析單元,包括:
解析子單元,用于通過be,依據(jù)所述符號文件中業(yè)務(wù)程序的全局變量的名稱和內(nèi)存地址,解析出所述dump文件中所述業(yè)務(wù)程序在崩潰時(shí)的變量信息;
還原子單元,用于通過be,依據(jù)所述資源文件中業(yè)務(wù)程序的結(jié)構(gòu)信息和所述業(yè)務(wù)程序在崩潰時(shí)的變量信息,還原所述業(yè)務(wù)程序在崩潰時(shí)的數(shù)據(jù)結(jié)構(gòu)。
可選的,還包括:
抽取單元,用于從所述業(yè)務(wù)程序的代碼中抽取所述業(yè)務(wù)程序的結(jié)構(gòu)信息;
第二保存單元,用于將所述結(jié)構(gòu)信息保存為所述資源文件。
可選的,還包括:
生成單元,用于依據(jù)所述業(yè)務(wù)程序生成elf可執(zhí)行文件;
讀取單元,用于從所述elf文件中,讀取出所述業(yè)務(wù)程序的全局變量的名稱和內(nèi)存地址;
第三保存單元,用于將所述全局變量的名稱和內(nèi)存地址保存為所述符號文件。
通過本發(fā)明實(shí)施例的系統(tǒng),可以還原出業(yè)務(wù)程序在崩潰時(shí)的數(shù)據(jù)結(jié)構(gòu),并且,通過be的方式對dump文件進(jìn)行解析,得到的解析結(jié)果是以目錄的形式存在的,方便用戶查看業(yè)務(wù)程序崩潰的原因。
需要說明的是,本說明書中的各個(gè)實(shí)施例均采用遞進(jìn)的方式描述,每個(gè)實(shí)施例重點(diǎn)說明的都是與其他實(shí)施例的不同之處,各個(gè)實(shí)施例之間相同相似的部分互相參見即可。
對所公開的實(shí)施例的上述說明,使本領(lǐng)域?qū)I(yè)技術(shù)人員能夠?qū)崿F(xiàn)或使用本發(fā)明。對這些實(shí)施例的多種修改對本領(lǐng)域的專業(yè)技術(shù)人員來說將是顯而易見的,本文中所定義的一般原理可以在不脫離本發(fā)明的精神或范圍的情況下,在其它實(shí)施例中實(shí)現(xiàn)。因此,本發(fā)明將不會(huì)被限制于本文所示的這些實(shí)施例,而是要符合與本文所公開的原理和新穎特點(diǎn)相一致的最寬的范圍。