專利名稱:內(nèi)存重復(fù)釋放的定位方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及內(nèi)存使用技術(shù),尤其涉及一種內(nèi)存重復(fù)釋放的定位 方法和系統(tǒng)。
背景技術(shù):
現(xiàn)在的軟件系統(tǒng)有的非常龐大,代碼動(dòng)輒上百萬行。而在這些 系統(tǒng)中,由于數(shù)據(jù)關(guān)系復(fù)雜,經(jīng)常會(huì)一個(gè)指針存放在多個(gè)地方,且 每個(gè)指針都可能有多個(gè)流程會(huì)進(jìn)行釋放。 一個(gè)正確的系統(tǒng),應(yīng)該保 證, 一塊被申請(qǐng)的內(nèi)存,不管有多少個(gè)指針指向它,都只能被釋放 一次。
但在實(shí)際系統(tǒng)中,由于使用復(fù)雜,經(jīng)常會(huì)由于異常流程導(dǎo)致內(nèi) 存重復(fù)釋放。為了定位重復(fù)釋放問題, 一種經(jīng)常采用的方法是在檢 測到重復(fù)釋放后打印當(dāng)前運(yùn)行環(huán)境,通過當(dāng)前環(huán)境發(fā)現(xiàn)是哪個(gè)指針 釋放出錯(cuò)。這種方法對(duì)單個(gè)指針重復(fù)釋放的檢測比較有效。但一旦
多個(gè)指針指向同一塊內(nèi)存且多個(gè)指針同時(shí)發(fā)生釋i文,該方法就無法 準(zhǔn)確知道重復(fù)釋放的錯(cuò)誤根源,不知道是怎樣的業(yè)務(wù)流程導(dǎo)致重復(fù) 釋放。為了定位問題,不得不通過大量走讀代碼或者在釋放流程處 打點(diǎn)進(jìn)行復(fù)現(xiàn),非常耗費(fèi)時(shí)間和精力。
因此,需要一種針對(duì)內(nèi)存重復(fù)釋放的定位技術(shù)方案,以在多個(gè) 流程重復(fù)釋放內(nèi)存的情況下快速定位錯(cuò)誤根源。
發(fā)明內(nèi)容
本發(fā)明的主要目的在于提供一種內(nèi)存重復(fù)釋放的定位方法和 系統(tǒng),用于克月良i見有才支術(shù)中的無法有效發(fā)J見多個(gè)流禾呈釋方文同 一個(gè)內(nèi) 存的錯(cuò)誤,導(dǎo)致多個(gè)流程在異常情況下重復(fù)釋放內(nèi)存,不得不耗費(fèi) 大量人力去復(fù)現(xiàn)或者走讀代碼來發(fā)現(xiàn)錯(cuò)誤所在的問題。
為了實(shí)現(xiàn)上述目的,根據(jù)本發(fā)明的第一方面,本發(fā)明提供了一
種內(nèi)存重復(fù)釋》文的定位方法。定位方法包括以下步驟
步驟S102,申"i青業(yè)務(wù)內(nèi)存,并申i青與業(yè)務(wù)內(nèi)存相關(guān)的關(guān)聯(lián)內(nèi)存;
步驟S104,在釋放業(yè)務(wù)內(nèi)存之前或同時(shí),獲得關(guān)聯(lián)內(nèi)存的地址;
步驟S106,檢測是否為重復(fù)釋放,如果是重復(fù)釋放,則進(jìn)行至 步驟S108,如果不是重復(fù)釋》文,則進(jìn)行至步驟S110;
步驟S108,將當(dāng)前運(yùn)行環(huán)境記錄到指定記錄區(qū),并將關(guān)聯(lián)內(nèi)存 的內(nèi)容轉(zhuǎn)儲(chǔ)到指定記錄區(qū),通過分析指定記錄區(qū)的記錄,進(jìn)行重復(fù)
釋放定位;
步驟SllO,將當(dāng)前運(yùn)行環(huán)境記錄到關(guān)聯(lián)內(nèi)存中。
可選地,在步驟S102中,通過表記錄業(yè)務(wù)內(nèi)存的地址和關(guān)聯(lián) 內(nèi)存的地址。在步驟S104中,通過查表,獲得關(guān)聯(lián)內(nèi)存的地址。
運(yùn)行環(huán)境包括調(diào)用棧或任務(wù)信息或各種信息的組合。指定記錄 區(qū)包括日志文件、屏幕、或內(nèi)存區(qū)。
為了實(shí)現(xiàn)上述目的,根據(jù)本發(fā)明的第二方面,本發(fā)明提供了一 種內(nèi)存重復(fù)釋放的定位系統(tǒng)。定位系統(tǒng)包括申請(qǐng)模塊,用于申請(qǐng) 業(yè)務(wù)內(nèi)存,以及申請(qǐng)與業(yè)務(wù)內(nèi)存相關(guān)的關(guān)聯(lián)內(nèi)存;釋放模塊,用于
釋方文業(yè)務(wù)內(nèi)存,以及獲4f關(guān)聯(lián)內(nèi)存的i也址;;險(xiǎn)測沖莫塊,用于4企測釋
放模塊進(jìn)行的業(yè)務(wù)內(nèi)存的釋放是否為重復(fù)釋放;處理模塊,用于在 檢測模塊檢測出釋放是重復(fù)釋放時(shí),將當(dāng)前運(yùn)行環(huán)境記錄到指定記 錄區(qū),并將關(guān)聯(lián)內(nèi)存的內(nèi)容轉(zhuǎn)儲(chǔ)到指定記錄區(qū),以及在檢測模塊檢 測出釋放不是重復(fù)釋放時(shí),將當(dāng)前運(yùn)行環(huán)境記錄到述關(guān)聯(lián)內(nèi)存中。
可選地,申請(qǐng)模塊通過表記錄業(yè)務(wù)內(nèi)存的地址和關(guān)聯(lián)內(nèi)存的地 址。釋放模塊通過查表獲得關(guān)聯(lián)內(nèi)存的地址。
運(yùn)行環(huán)境包括調(diào)用?;蛉蝿?wù)信息或各種信息的組合。指定記錄 區(qū)包括日志文件、屏幕、或內(nèi)存區(qū)。
通過上述技術(shù)方案,本發(fā)明在發(fā)生內(nèi)存重復(fù)釋放時(shí),可以快速 定位錯(cuò)誤根源,避免了人工走讀代碼或打點(diǎn)復(fù)現(xiàn),極大的提高了排 錯(cuò)效率。
附困說明
此處所i兌明的附圖用來提供對(duì)本發(fā)明的進(jìn)一步理解,構(gòu)成本申 請(qǐng)的一部分,本發(fā)明的示意性實(shí)施例及其說明用于解釋本發(fā)明,并
不構(gòu)成對(duì)本發(fā)明的不當(dāng)限定。在附圖中
圖1是根據(jù)本發(fā)明的內(nèi)存重復(fù)釋放的定位方法的流程圖; 圖2是根據(jù)本發(fā)明的內(nèi)存重復(fù)釋放的定位系統(tǒng)的框圖; 圖3是#4居本發(fā)明實(shí)施例的內(nèi)存釋放時(shí)的流程圖。 務(wù)本實(shí)施方式
下面將參考附圖詳細(xì)i兌明本發(fā)明。
參照?qǐng)D1,沖艮才居本發(fā)明的內(nèi)存重復(fù)釋方文的定^f立方法包才舌以下步
驟
步驟S102,申請(qǐng)業(yè)務(wù)內(nèi)存,并申請(qǐng)與業(yè)務(wù)內(nèi)存相關(guān)的關(guān)聯(lián)內(nèi)存。 通過表記錄業(yè)務(wù)內(nèi)存的地址和關(guān)聯(lián)內(nèi)存的地址。 步驟S104,在釋放業(yè)務(wù)內(nèi)存之前或同時(shí),獲得關(guān)聯(lián)內(nèi)存的地址。 通過查表,獲得關(guān)聯(lián)內(nèi)存的地址。
步驟S106,檢測是否為重復(fù)釋放,如果是重復(fù)釋放,則進(jìn)行至 步驟S108,如果不是重復(fù)釋力文,則進(jìn)4于至步驟SllO。
步驟S108,將當(dāng)前運(yùn)行環(huán)境記錄到指定記錄區(qū),并將關(guān)聯(lián)內(nèi)存 的內(nèi)容轉(zhuǎn)儲(chǔ)到指定記錄區(qū),通過分析指定記錄區(qū)的記錄,進(jìn)行重復(fù)
釋方文定位。
運(yùn)行環(huán)境包括調(diào)用?;蛉蝿?wù)信息或各種信息的組合。
指定記錄區(qū)包括日志文件、屏幕、或內(nèi)存區(qū)。
步驟SllO,將當(dāng)前運(yùn)^f亍環(huán)境記錄到關(guān)聯(lián)內(nèi)存中。
參照?qǐng)D2,根據(jù)本發(fā)明的內(nèi)存重復(fù)釋放的定位系統(tǒng)10包括申 請(qǐng)模塊20,用于申請(qǐng)業(yè)務(wù)內(nèi)存,以及申請(qǐng)與業(yè)務(wù)內(nèi)存相關(guān)的關(guān)聯(lián)內(nèi) 存;釋放模塊30,用于釋放業(yè)務(wù)內(nèi)存,以及獲得關(guān)聯(lián)內(nèi)存的地址; 檢測模塊40,用于檢測釋放模塊30進(jìn)行的業(yè)務(wù)內(nèi)存的釋放是否為 重復(fù)釋放;處理模塊50,用于在檢測模塊40檢測出釋放是重復(fù)釋 放時(shí),將當(dāng)前運(yùn)行環(huán)境記錄到指定記錄區(qū),并將關(guān)聯(lián)內(nèi)存的內(nèi)容轉(zhuǎn) 儲(chǔ)到指定記錄區(qū),以及在檢測模塊40檢測出釋放不是重復(fù)釋放時(shí), 將當(dāng)前運(yùn)行環(huán)境記錄到述關(guān)聯(lián)內(nèi)存中。
可選地,申請(qǐng)沖莫塊20通過表記錄業(yè)務(wù)內(nèi)存的地址和關(guān)聯(lián)內(nèi)存 的地址。釋放模塊30通過查表獲得關(guān)聯(lián)內(nèi)存的地址。
運(yùn)行環(huán)境包括調(diào)用?;蛉蝿?wù)信息或各種信息的組合。指定記錄 區(qū)包括日志文件、屏幕、或內(nèi)存區(qū)。
本發(fā)明涉及一種內(nèi)存重復(fù)釋放定位方法,尤其適用于在軟件系 統(tǒng)4艮龐大,無法有效的通過走讀代碼來發(fā)現(xiàn)重復(fù)釋i文內(nèi)存流程的情況。
本發(fā)明所述的定位方法包括以下組成部分
1、 進(jìn)行內(nèi)存申請(qǐng);
2、 釋放內(nèi)存;
3、 在釋放內(nèi)存時(shí),同時(shí)檢測內(nèi)存是否重復(fù)釋i文; 同時(shí)還包括如下組成部分
4、 在申請(qǐng)內(nèi)存時(shí),同時(shí)申請(qǐng)一片關(guān)聯(lián)內(nèi)存;
5、 釋放內(nèi)存時(shí),把當(dāng)前流程記錄進(jìn)和所釋放內(nèi)存相關(guān)聯(lián)的關(guān) 聯(lián)內(nèi)存中;
6、 當(dāng)檢測到重復(fù)釋放時(shí),把當(dāng)前流程記錄到指定地方(可以 直接輸出到屏幕,也可以記錄到日志文件中),同時(shí)把重復(fù)釋放的 內(nèi)存的關(guān)聯(lián)內(nèi)存內(nèi)容轉(zhuǎn)儲(chǔ)到指定的地方。
下面描述具體實(shí)施過程。
1、 內(nèi)存申i青4妾口在為業(yè)務(wù)申i青內(nèi)存時(shí),同時(shí)獲得一片專九跡i己 錄的關(guān)聯(lián)內(nèi)存。同時(shí)用表記錄業(yè)務(wù)內(nèi)存地址和關(guān)聯(lián)內(nèi)存地址。
2、 當(dāng)業(yè)務(wù)調(diào)用釋方iU妾口時(shí),通過查表,獲得和所釋》文的業(yè)務(wù) 內(nèi)存相關(guān)聯(lián)的關(guān)聯(lián)內(nèi)存地址。
3、 如圖3所示,釋放內(nèi)存時(shí),檢測是否重復(fù)釋放。如果沒重 復(fù)釋放,則把釋方文時(shí)的程序運(yùn)行環(huán)境記錄在第2步中獲得的關(guān)聯(lián)內(nèi) 存中。運(yùn)行環(huán)境可以是調(diào)用?;蛉蝿?wù)信息或各種信息的組合。
4、 如圖3所示,釋放內(nèi)存時(shí),檢測是否重復(fù)釋放內(nèi)存。如果 發(fā)現(xiàn)重復(fù)釋方文,則記錄當(dāng)前運(yùn)4亍環(huán)境到指定記錄區(qū)(指定記錄區(qū)可 以是文件,或者直接輸出到屏幕,或者是指定的內(nèi)存區(qū)),同時(shí)把 第2步獲得的關(guān)聯(lián)內(nèi)存的內(nèi)容轉(zhuǎn)儲(chǔ)到指定的記錄區(qū)。
5、 在檢測到重復(fù)釋放后,通過分析指定記錄區(qū)的記錄結(jié)果, 就可以快速定位重復(fù)釋》文的流程錯(cuò)誤。
以上所述僅為本發(fā)明的優(yōu)選實(shí)施例而已,并不用于限制本發(fā) 明,對(duì)于本領(lǐng)域的技術(shù)人員來說,本發(fā)明可以有各種更改和變化。 凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn) 等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
1.一種內(nèi)存重復(fù)釋放的定位方法,其特征在于,包括以下步驟步驟S102,申請(qǐng)業(yè)務(wù)內(nèi)存,并申請(qǐng)與所述業(yè)務(wù)內(nèi)存相關(guān)的關(guān)聯(lián)內(nèi)存;步驟S104,在釋放所述業(yè)務(wù)內(nèi)存之前或同時(shí),獲得所述關(guān)聯(lián)內(nèi)存的地址;步驟S106,檢測是否為重復(fù)釋放,如果是重復(fù)釋放,則進(jìn)行至步驟S108,如果不是重復(fù)釋放,則進(jìn)行至步驟S110;步驟S108,將當(dāng)前運(yùn)行環(huán)境記錄到指定記錄區(qū),并將所述關(guān)聯(lián)內(nèi)存的內(nèi)容轉(zhuǎn)儲(chǔ)到所述指定記錄區(qū),通過分析所述指定記錄區(qū)的記錄,進(jìn)行重復(fù)釋放定位;步驟S110,將當(dāng)前運(yùn)行環(huán)境記錄到所述關(guān)聯(lián)內(nèi)存中。
2. 根據(jù)權(quán)利要求1所述的定位方法,其特征在于,在步驟S102 中,通過表記錄所述業(yè)務(wù)內(nèi)存的地址和所述關(guān)聯(lián)內(nèi)存的地址。
3. 根據(jù)權(quán)利要求2所述的定位方法,其特征在于,在步驟S104 中,通過查表,獲得所述關(guān)聯(lián)內(nèi)存的地址。
4. 根據(jù)權(quán)利要求1所述的定位方法,其特征在于,所述運(yùn)行環(huán)境 包括調(diào)用棧或任務(wù)信息或各種信息的組合。
5. 根據(jù)權(quán)利要求1所述的定位方法,其特征在于,所述指定記錄 區(qū)包括日志文件、屏幕、或內(nèi)存區(qū)。
6. —種內(nèi)存重復(fù)釋方文的定位系統(tǒng),其特征在于,包括申請(qǐng)模塊,用于申請(qǐng)業(yè)務(wù)內(nèi)存,以及申請(qǐng)與所述業(yè)務(wù)內(nèi) 存相關(guān)的關(guān)聯(lián)內(nèi)存;釋放模塊,用于釋放所述業(yè)務(wù)內(nèi)存,以及獲得所述關(guān)聯(lián)內(nèi)存的i也址;檢測模塊,用于檢測所述釋放模塊進(jìn)行的所述業(yè)務(wù)內(nèi)存 的釋放是否為重復(fù)釋放;處理模塊,用于在所述檢測模塊檢測出所述釋放是重復(fù) 釋放時(shí),將當(dāng)前運(yùn)行環(huán)境記錄到指定記錄區(qū),并將所述關(guān)聯(lián)內(nèi) 存的內(nèi)容轉(zhuǎn)儲(chǔ)到所述指定記錄區(qū),以及在所述檢測模塊檢測出 所述釋放不是重復(fù)釋放時(shí),將當(dāng)前運(yùn)行環(huán)境記錄到所述關(guān)聯(lián)內(nèi) 存中。
7. 根據(jù)權(quán)利要求6所述的定位系統(tǒng),其特征在于,所述申請(qǐng)模塊 通過表記錄所述業(yè)務(wù)內(nèi)存的地址和所述關(guān)聯(lián)內(nèi)存的地址。
8. 根據(jù)權(quán)利要求7所述的定位系統(tǒng),其特征在于,所述釋放模塊 通過查表獲得所述關(guān)聯(lián)內(nèi)存的地址。
9. 根據(jù)權(quán)利要求6所述的定位系統(tǒng),其特征在于,所述運(yùn)行環(huán)境 包括調(diào)用?;蛉蝿?wù)信息或各種信息的組合。
10. 根據(jù)權(quán)利要求6所述的定位系統(tǒng),其特征在于,所述指定記錄 區(qū)包括日志文件、屏幕、或內(nèi)存區(qū)。
全文摘要
本發(fā)明公開了一種內(nèi)存重復(fù)釋放的定位方法和系統(tǒng)。申請(qǐng)業(yè)務(wù)內(nèi)存,并申請(qǐng)與業(yè)務(wù)內(nèi)存相關(guān)的關(guān)聯(lián)內(nèi)存;在釋放業(yè)務(wù)內(nèi)存之前或同時(shí),獲得關(guān)聯(lián)內(nèi)存的地址;檢測是否為重復(fù)釋放,如果是重復(fù)釋放,則將當(dāng)前運(yùn)行環(huán)境記錄到指定記錄區(qū),并將關(guān)聯(lián)內(nèi)存的內(nèi)容轉(zhuǎn)儲(chǔ)到指定記錄區(qū),通過分析指定記錄區(qū)的記錄,進(jìn)行重復(fù)釋放定位,如果不是重復(fù)釋放,則將當(dāng)前運(yùn)行環(huán)境記錄到關(guān)聯(lián)內(nèi)存中。本發(fā)明在發(fā)生內(nèi)存重復(fù)釋放時(shí),可以快速定位錯(cuò)誤根源,避免了人工走讀代碼或打點(diǎn)復(fù)現(xiàn),極大的提高了排錯(cuò)效率。
文檔編號(hào)G06F11/36GK101174241SQ20061015046
公開日2008年5月7日 申請(qǐng)日期2006年10月31日 優(yōu)先權(quán)日2006年10月31日
發(fā)明者傅紅燕, 葉媲書 申請(qǐng)人:中興通訊股份有限公司