專(zhuān)利名稱(chēng):軟件Bug追蹤方法及其計(jì)算機(jī)系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種軟件Bug追蹤方法及其計(jì)算機(jī)系統(tǒng),尤其涉及一種當(dāng)軟件運(yùn)行中 發(fā)生崩潰時(shí)的Bug追蹤方法及其計(jì)算機(jī)系統(tǒng)。
背景技術(shù):
在軟件開(kāi)發(fā)與維護(hù)的過(guò)程中,經(jīng)常會(huì)出現(xiàn)軟件Bug, Bug—詞的原意是"臭蟲(chóng)"或 "蟲(chóng)子"。這里是指電腦系統(tǒng)或程序中隱藏的一些未被發(fā)現(xiàn)的缺陷或問(wèn)題。在各種類(lèi)型的Bug 中,有的不會(huì)對(duì)軟件造成危害,有的卻直接會(huì)讓軟件崩潰,給用戶(hù)帶來(lái)無(wú)法估量的損失。所 述軟件崩潰是指軟件運(yùn)行過(guò)程中,由于軟件的程序錯(cuò)誤導(dǎo)致該軟件無(wú)法正常工作、非正常 的退出等狀況。雖然可以通過(guò)嚴(yán)格的、有組織的軟件測(cè)試盡可能的保證最終交付的軟件產(chǎn) 品的穩(wěn)定性,但依然無(wú)法避免Bug的出現(xiàn)。 因此,在軟件運(yùn)行發(fā)生崩潰之后,在最短的時(shí)間內(nèi)找出Bug的問(wèn)題所在并修復(fù),快 速恢復(fù)軟件,使其正常工作,能夠極大的減少由于軟件崩潰所帶來(lái)的損失。傳統(tǒng)做法中最普 遍的方式是采用日志形式,即對(duì)程序本身的處理狀況進(jìn)行記錄,將獲取的軟件Bug信息及 文字信息進(jìn)行記錄,生成日志文件。這樣維護(hù)人員可通過(guò)日志文件中記錄的信息進(jìn)行查看, 從而找到問(wèn)題所在。這種方式在很大程度上提升了解決Bug的速度,然而,傳統(tǒng)日志的操作 方式有以下缺點(diǎn)1.傳統(tǒng)日志依賴(lài)程序開(kāi)發(fā)人員的編碼傳統(tǒng)日志中所具備的記錄Bug原
因與位置的功能,依靠的是程序開(kāi)發(fā)人員在可能出現(xiàn)Bug的地方進(jìn)行異常捕獲,從根本上
來(lái)說(shuō),程序開(kāi)發(fā)人員對(duì)程序運(yùn)行的理解直接關(guān)系到日志記錄的準(zhǔn)確與否。要達(dá)到準(zhǔn)確的捕
獲Bug,需要開(kāi)發(fā)過(guò)程中寫(xiě)入大量的代碼,且需要程序維護(hù)人員具備完善的異常處理經(jīng)驗(yàn)。
2.無(wú)法記錄軟件運(yùn)行中發(fā)生崩潰的原因這一點(diǎn)是傳統(tǒng)日志的最大缺陷,它只記錄程序或
框架所定義的錯(cuò)誤。但對(duì)于已經(jīng)投入的大型軟件來(lái)說(shuō),若由于程序錯(cuò)誤導(dǎo)致該軟件運(yùn)行中
發(fā)生崩潰,往往只彈出類(lèi)似0x0040104a的內(nèi)存地址,之后直接退出正在運(yùn)行的軟件,記錄 類(lèi)似于"嚴(yán)重系統(tǒng)錯(cuò)誤關(guān)閉"等信息,而對(duì)于出現(xiàn)崩潰的Bug原因卻無(wú)法獲取,使得用戶(hù)無(wú) 法通過(guò)日志了解發(fā)生崩潰的原因。
發(fā)明內(nèi)容
鑒于以上內(nèi)容,有必要提供一種軟件Bug追蹤的計(jì)算機(jī)系統(tǒng),其能夠準(zhǔn)確記錄軟 件運(yùn)行中導(dǎo)致該軟件發(fā)生崩潰時(shí)的原因,提高了軟件維護(hù)的效率。 鑒于以上內(nèi)容,還有必要提供一種軟件Bug追蹤方法,其能夠準(zhǔn)確記錄軟件運(yùn)行 中導(dǎo)致該軟件發(fā)生崩潰時(shí)的原因,提高了軟件維護(hù)的效率。 —種軟件Bug追蹤的計(jì)算機(jī)系統(tǒng),該計(jì)算機(jī)系統(tǒng)包括獲取模塊,用于獲取正在運(yùn) 行中的軟件所包含的函數(shù)信息,將其保存到數(shù)據(jù)庫(kù)中;激活模塊,用于當(dāng)該軟件在運(yùn)行過(guò)程 中發(fā)生崩潰時(shí),激活計(jì)算機(jī)操作系統(tǒng)中的全局觸發(fā)器,以讀取操作系統(tǒng)在該軟件發(fā)生崩潰 時(shí)所查找到的內(nèi)存地址,該內(nèi)存地址即為崩潰地址;異常捕獲模塊,用于啟動(dòng)操作系統(tǒng)中的 異常處理函數(shù),通過(guò)該異常處理函數(shù)捕獲該軟件發(fā)生崩潰的原因及時(shí)間;查找模塊,用于將
3上述崩潰地址與數(shù)據(jù)庫(kù)中保存的函數(shù)信息進(jìn)行比較,查找出該軟件發(fā)生崩潰所對(duì)應(yīng)的函數(shù) 信息;日志生成模塊,用于根據(jù)所述軟件發(fā)生崩潰的原因及時(shí)間、查找出的函數(shù)信息,生成 日志文件。 —種軟件Bug追蹤方法,該方法包括以下步驟獲取正在運(yùn)行中的軟件所包含的 函數(shù)信息,將其保存到數(shù)據(jù)庫(kù)中;當(dāng)該軟件運(yùn)行中發(fā)生崩潰時(shí),激活計(jì)算機(jī)操作系統(tǒng)中的全 局觸發(fā)器,以讀取操作系統(tǒng)在該軟件發(fā)生崩潰時(shí)所查找到的內(nèi)存地址,該內(nèi)存地址即為崩 潰地址;啟動(dòng)操作系統(tǒng)中的異常處理函數(shù),通過(guò)該異常處理函數(shù)捕獲該軟件發(fā)生崩潰的原 因及時(shí)間;將上述崩潰地址與數(shù)據(jù)庫(kù)中保存的函數(shù)信息進(jìn)行比較,查找出該軟件發(fā)生崩潰 所對(duì)應(yīng)的函數(shù)信息;根據(jù)所述軟件發(fā)生崩潰的原因及時(shí)間、查找出的函數(shù)信息,生成日志文 件。 相較于現(xiàn)有技術(shù),所述的軟件Bug追蹤方法及其計(jì)算機(jī)系統(tǒng),能夠準(zhǔn)確記錄軟件 運(yùn)行中導(dǎo)致該軟件發(fā)生崩潰時(shí)的原因,提高了軟件維護(hù)的效率。
圖1是本發(fā)明軟件Bug追蹤計(jì)算機(jī)系統(tǒng)的硬件框架圖。
圖2是本發(fā)明圖1中計(jì)算機(jī)20較佳實(shí)施例的功能模塊圖。
圖3是本發(fā)明軟件Bug追蹤方法較佳實(shí)施例的流程圖。
具體實(shí)施例方式
如圖l所示,是本發(fā)明軟件Bug追蹤的計(jì)算機(jī)系統(tǒng)的硬件框架圖。該計(jì)算機(jī)系統(tǒng) 主要包括計(jì)算機(jī)20及與該計(jì)算機(jī)20相連的數(shù)據(jù)庫(kù)50。所述計(jì)算機(jī)20連接有顯示器10、 鍵盤(pán)30及鼠標(biāo)40,作為具體操作時(shí)的輸入、輸出設(shè)備。 所述數(shù)據(jù)庫(kù)50既可以?xún)?nèi)置于計(jì)算機(jī)20中,也可以外置于計(jì)算機(jī)20。該數(shù)據(jù)庫(kù)50 用于存儲(chǔ)計(jì)算機(jī)20中運(yùn)行的軟件的函數(shù)信息。該函數(shù)信息存于軟件的編譯日志文件中,其 包括該軟件所包含的函數(shù)名稱(chēng)、函數(shù)對(duì)應(yīng)的內(nèi)存地址、函數(shù)所對(duì)應(yīng)的源代碼文件名稱(chēng)及函 數(shù)在源代碼文件中的行數(shù)等信息。在本較佳實(shí)施例中,所述函數(shù)信息的格式(以下列舉三 條函數(shù)信息為例)如下所示0001 :00000020jnain 00401020 f Test, obj Client, cpp 120001:00000060 Testl@@YAXXZ 00401060 f Test.obj Dome, cpp 65 0001 :000000a0_chaesp 004010a0 f LIBCD :chaesp.obj Clip, cpp 23 以第二條為例,其中"? Test,tYAXXZ"為函數(shù)名稱(chēng),在本較佳實(shí)施例中,由于
軟件是由0++語(yǔ)言進(jìn)行編寫(xiě)的,因此以問(wèn)號(hào)開(kāi)頭的函數(shù)名稱(chēng)都是以0++修飾的名稱(chēng),"@@
YAXXZ"則為區(qū)別重載函數(shù)而加的后綴,所以"? Testl@@YAXXZ"指的是源代碼文件中的
"Testl"函數(shù)。"00401060"為內(nèi)存地址。"Test, obj"表示編譯時(shí)所調(diào)用的庫(kù)函數(shù)。"Dome.
cpp"表示函數(shù)"Testl"所對(duì)應(yīng)的源代碼文件名稱(chēng),"65"表示函數(shù)"Testl"在源代碼文件
"Dome, cpp"中對(duì)應(yīng)的代碼行數(shù)。 如圖2所示,是本發(fā)明圖1中計(jì)算機(jī)20較佳實(shí)施例的功能模塊圖。該計(jì)算機(jī)20包 括獲取模塊210、激活模塊211、異常捕獲模塊212、查找模塊213及日志生成模塊214。本 發(fā)明所稱(chēng)的模塊是完成一特定功能的計(jì)算機(jī)程序段,比程序更適合于描述軟件在計(jì)算機(jī)中的執(zhí)行過(guò)程,因此在本發(fā)明以下對(duì)軟件描述中都以模塊描述。 所述獲取模塊210用于獲取正在運(yùn)行中的軟件所包含的函數(shù)信息,將其保存到數(shù) 據(jù)庫(kù)50中。 當(dāng)該軟件運(yùn)行中發(fā)生崩潰時(shí),所述激活模塊211用于激活計(jì)算機(jī)20的操作系統(tǒng)中 的全局觸發(fā)器,該全局觸發(fā)器用于讀取操作系統(tǒng)在該軟件運(yùn)行中發(fā)生崩潰時(shí)所查找到的內(nèi) 存地址,該內(nèi)存地址即為崩潰地址。具體而言,操作系統(tǒng)包括一種觸發(fā)機(jī)制,若出現(xiàn)程序錯(cuò) 誤導(dǎo)致該軟件在運(yùn)行中發(fā)生崩潰時(shí),激活模塊211會(huì)啟動(dòng)該觸發(fā)機(jī)制,操作系統(tǒng)通過(guò)內(nèi)部 的內(nèi)存查找函數(shù)查找該軟件在運(yùn)行中發(fā)生崩潰位置所對(duì)應(yīng)的內(nèi)存地址,之后彈出一個(gè)對(duì)話(huà) 框,顯示該內(nèi)存地址信息。 所述異常捕獲模塊212用于啟動(dòng)操作系統(tǒng)中的異常處理函數(shù),通過(guò)該異常處理函 數(shù)捕獲軟件運(yùn)行中發(fā)生崩潰的原因及時(shí)間。 所述查找模塊213用于將上述崩潰地址與數(shù)據(jù)庫(kù)50中保存的函數(shù)信息進(jìn)行比較, 查找出該軟件運(yùn)行中發(fā)生崩潰所對(duì)應(yīng)的函數(shù)信息。具體而言,查找模塊213將所述的崩潰 地址與數(shù)據(jù)庫(kù)50中保存的函數(shù)信息中的內(nèi)存地址進(jìn)行比較,找出最接近的內(nèi)存地址。假設(shè) 所查找到的崩潰地址為"0x00401082",其中"Ox"為崩潰地址的前綴,查找模塊213提取該 崩潰地址中前綴"0x"后面的信息"00401082",之后與數(shù)據(jù)庫(kù)50中保存的函數(shù)信息進(jìn)行比 較,經(jīng)過(guò)比較后確定該崩潰地址與函數(shù)信息中的內(nèi)存地址"00401060"最接近,由此可知, 所述軟件在發(fā)生崩潰時(shí)的出錯(cuò)函數(shù)為"Testl",該出錯(cuò)函數(shù)所在的源代碼文件為"Dome. c卯",該出錯(cuò)函數(shù)"Testl"在源代碼文件中的行數(shù)為第65行。 所述日志生成模塊214用于根據(jù)所述軟件運(yùn)行中發(fā)生崩潰時(shí)的原因及時(shí)間、查找
出的函數(shù)信息,生成日志文件。該日志文件包括軟件運(yùn)行中發(fā)生崩潰時(shí)的崩潰地址、時(shí)間、
原因、函數(shù)名稱(chēng)、函數(shù)所在的源代碼文件及函數(shù)在源代碼文件中的行數(shù)。在本較佳實(shí)施例
中,所述日志文件的格式如下 [2008-08-08 13:13:33]EXCEPTION ADDRESS :0x0040011082EXCEPTIONTYPE :EXCEPTION_INT_DIVIDE_BY_ZERO = C0000094H
FUNCTION "Testl"AT "Dome. cpp"LINE :65
[2008-08-08 13:13:33] 其中,[2008-08-08 13:13:33]表示該軟件運(yùn)行中發(fā)生崩潰的時(shí)間、 EXCEPTIONADDRESS :0x0040011082表示崩潰地址、EXCEPTIONTYPE : EXCEPT I ON_ INT_DIVIDE_BY_ZERO = C0000094H表示發(fā)生崩潰的原因?yàn)槌沐e(cuò)誤、 FUNCTION "Testl"AT "Dome. cpp"LINE :65表示該軟件運(yùn)行中發(fā)生崩潰時(shí)的函數(shù)名稱(chēng)為 "Testl "、函數(shù)"Testl "所在的源代碼文件名稱(chēng)為"Dome, cpp"及函數(shù)"Testl"在源代碼文 件"Dome. c卯"中的行數(shù)為第65行。 如圖3所示,是本發(fā)明軟件Bug追蹤方法較佳實(shí)施例的流程圖。 首先,步驟SIO,獲取模塊210獲取正在運(yùn)行中的軟件所包含的函數(shù)信息,將其保
存到數(shù)據(jù)庫(kù)50中。 步驟S11,當(dāng)該軟件在運(yùn)行過(guò)程中發(fā)生崩潰時(shí),激活模塊211激活計(jì)算機(jī)20的操作 系統(tǒng)中的全局觸發(fā)器,以讀取操作系統(tǒng)在該軟件運(yùn)行中發(fā)生崩潰時(shí)所查找到的內(nèi)存地址,該內(nèi)存地址即為崩潰地址。具體而言,操作系統(tǒng)中包括一種觸發(fā)機(jī)制,若出現(xiàn)程序錯(cuò)誤導(dǎo) 致該軟件在運(yùn)行中發(fā)生崩潰時(shí),激活模塊211會(huì)啟動(dòng)該觸發(fā)機(jī)制,操作系統(tǒng)通過(guò)內(nèi)部的內(nèi) 存查找函數(shù)查找該軟件在運(yùn)行中發(fā)生崩潰所對(duì)應(yīng)的內(nèi)存地址,之后操作系統(tǒng)彈出一個(gè)對(duì)話(huà) 框,顯示該內(nèi)存地址信息。 步驟S12,異常捕獲模塊212啟動(dòng)操作系統(tǒng)中的異常處理函數(shù),通過(guò)該異常處理函 數(shù)捕獲該軟件運(yùn)行中發(fā)生崩潰的原因及時(shí)間。 步驟S13,查找模塊213將上述崩潰地址與數(shù)據(jù)庫(kù)50中保存的函數(shù)信息進(jìn)行比較, 查找出該軟件運(yùn)行中發(fā)生崩潰所對(duì)應(yīng)的函數(shù)信息。具體而言,查找模塊213將所述的崩潰 地址與數(shù)據(jù)庫(kù)50中保存的函數(shù)信息中的內(nèi)存地址進(jìn)行比較,找出最接近的內(nèi)存地址。假設(shè) 所查找到的崩潰地址為"0x00401082",其中"Ox"為崩潰地址的前綴,查找模塊213提取該 崩潰地址中前綴"0x"后面的信息"00401082",之后與數(shù)據(jù)庫(kù)50中保存的函數(shù)信息進(jìn)行比 較,經(jīng)過(guò)比較后確定該崩潰地址與函數(shù)信息中的內(nèi)存地址"00401060"最接近,由此可知, 所述軟件在發(fā)生崩潰時(shí)的出錯(cuò)函數(shù)為"Testl",該出錯(cuò)函數(shù)所在的源代碼文件為"Dome. c卯",該出錯(cuò)函數(shù)"Testl"在源代碼文件中的行數(shù)為第65行。 步驟S14,日志生成模塊214根據(jù)所述發(fā)生崩潰的原因及時(shí)間、查找出的函數(shù)信 息,生成日志文件。該日志文件包括軟件運(yùn)行中發(fā)生崩潰時(shí)的崩潰地址、時(shí)間、原因、函數(shù)名 稱(chēng)、函數(shù)所在的源代碼文件及函數(shù)在源代碼文件中的行數(shù)。 最后所應(yīng)說(shuō)明的是,以上實(shí)施例僅用以說(shuō)明本發(fā)明的技術(shù)方案而非限制,盡管參 照以上較佳實(shí)施例對(duì)本發(fā)明進(jìn)行了詳細(xì)說(shuō)明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解,可以對(duì)本 發(fā)明的技術(shù)方案進(jìn)行修改或等同替換,而不脫離本發(fā)明技術(shù)方案的精神和范圍。
權(quán)利要求
一種軟件Bug追蹤的計(jì)算機(jī)系統(tǒng),其特征在于,該計(jì)算機(jī)系統(tǒng)包括獲取模塊,用于獲取正在運(yùn)行中的軟件所包含的函數(shù)信息,將其保存到數(shù)據(jù)庫(kù)中;激活模塊,用于當(dāng)該軟件在運(yùn)行過(guò)程中發(fā)生崩潰時(shí),激活計(jì)算機(jī)操作系統(tǒng)中的全局觸發(fā)器,以讀取操作系統(tǒng)在該軟件發(fā)生崩潰時(shí)所查找到的內(nèi)存地址,該內(nèi)存地址即為崩潰地址;異常捕獲模塊,用于啟動(dòng)操作系統(tǒng)中的異常處理函數(shù),通過(guò)該異常處理函數(shù)捕獲該軟件發(fā)生崩潰的原因及時(shí)間;查找模塊,用于將上述崩潰地址與數(shù)據(jù)庫(kù)中保存的函數(shù)信息進(jìn)行比較,查找出該軟件發(fā)生崩潰所對(duì)應(yīng)的函數(shù)信息;及日志生成模塊,用于根據(jù)所述軟件發(fā)生崩潰的原因及時(shí)間、查找出的函數(shù)信息,生成日志文件。
2. 如權(quán)利要求l所述的軟件Bug追蹤的計(jì)算機(jī)系統(tǒng),其特征在于,所述函數(shù)信息包括正 在運(yùn)行的軟件所包含的函數(shù)名稱(chēng)、函數(shù)對(duì)應(yīng)的內(nèi)存地址、函數(shù)所對(duì)應(yīng)的源代碼文件名稱(chēng)及 函數(shù)在源代碼文件中的行數(shù)。
3. 如權(quán)利要求1所述的軟件Bug追蹤的計(jì)算機(jī)系統(tǒng),其特征在于,所述日志文件包括軟 件運(yùn)行中發(fā)生崩潰時(shí)的崩潰地址、時(shí)間、原因、函數(shù)名稱(chēng)、函數(shù)所在的源代碼文件名稱(chēng)及函 數(shù)在源代碼文件中的行數(shù)。
4. 一種軟件Bug追蹤方法,其特征在于,該方法包括以下步驟 獲取正在運(yùn)行中的軟件所包含的函數(shù)信息,將其保存到數(shù)據(jù)庫(kù)中; 當(dāng)該軟件運(yùn)行中發(fā)生崩潰時(shí),激活計(jì)算機(jī)操作系統(tǒng)中的全局觸發(fā)器,以讀取操作系統(tǒng)在該軟件發(fā)生崩潰時(shí)所查找到的內(nèi)存地址,該內(nèi)存地址即為崩潰地址;啟動(dòng)操作系統(tǒng)中的異常處理函數(shù),通過(guò)該異常處理函數(shù)捕獲該軟件發(fā)生崩潰的原因及 時(shí)間;將上述崩潰地址與數(shù)據(jù)庫(kù)中保存的函數(shù)信息進(jìn)行比較,查找出該軟件發(fā)生崩潰所對(duì)應(yīng) 的函數(shù)信息;及根據(jù)所述軟件發(fā)生崩潰的原因及時(shí)間、查找出的函數(shù)信息,生成日志文件。
5. 如權(quán)利要求4所述的軟件Bug追蹤方法,其特征在于,所述函數(shù)信息包括正在運(yùn)行的 軟件所包含的函數(shù)名稱(chēng)、函數(shù)對(duì)應(yīng)的內(nèi)存地址、函數(shù)所對(duì)應(yīng)的源代碼文件名稱(chēng)及函數(shù)在源 代碼文件中的行數(shù)。
6. 如權(quán)利要求4所述的軟件Bug追蹤方法,其特征在于,所述日志文件包括軟件運(yùn)行中 發(fā)生崩潰時(shí)的崩潰地址、時(shí)間、原因、函數(shù)名稱(chēng)、函數(shù)所在的源代碼文件名稱(chēng)及函數(shù)在源代 碼文件中的行數(shù)。
全文摘要
一種軟件Bug追蹤方法,該方法包括以下步驟獲取正在運(yùn)行中的軟件所包含的函數(shù)信息,將其保存到數(shù)據(jù)庫(kù)中;當(dāng)該軟件運(yùn)行中發(fā)生崩潰時(shí),激活計(jì)算機(jī)操作系統(tǒng)中的全局觸發(fā)器,以讀取操作系統(tǒng)在該軟件發(fā)生崩潰時(shí)所查找到的內(nèi)存地址,該內(nèi)存地址即為崩潰地址;啟動(dòng)操作系統(tǒng)中的異常處理函數(shù),通過(guò)該異常處理函數(shù)捕獲該軟件發(fā)生崩潰的原因及時(shí)間;將上述崩潰地址與數(shù)據(jù)庫(kù)中保存的函數(shù)信息進(jìn)行比較,查找出該軟件發(fā)生崩潰所對(duì)應(yīng)的函數(shù)信息;根據(jù)所述軟件發(fā)生崩潰的原因及時(shí)間、查找出的函數(shù)信息,生成日志文件。
文檔編號(hào)G06F11/36GK101770422SQ20081030667
公開(kāi)日2010年7月7日 申請(qǐng)日期2008年12月30日 優(yōu)先權(quán)日2008年12月30日
發(fā)明者常小軍 申請(qǐng)人:鴻富錦精密工業(yè)(深圳)有限公司;鴻海精密工業(yè)股份有限公司