專利名稱:一種檢測(cè)內(nèi)存泄露的方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及測(cè)試技術(shù)領(lǐng)域,特別是涉及一種檢測(cè)內(nèi)存泄露的方法和裝置。
背景技術(shù):
在計(jì)算機(jī)科學(xué)中,內(nèi)存泄漏是指由于疏忽或錯(cuò)誤造成程序未能釋放已經(jīng)不再使用 的內(nèi)存的情況。內(nèi)存泄漏并非指內(nèi)存在物理上的消失,而是應(yīng)用程序分配某段內(nèi)存后,由于 設(shè)計(jì)錯(cuò)誤,失去了對(duì)該段內(nèi)存的控制,因而造成了內(nèi)存的浪費(fèi)。內(nèi)存泄漏與許多其他問(wèn)題有 著相似的癥狀,并且通常情況下只能由那些可以獲得程序源代碼的程序員才可以分析出來(lái)一般我們常說(shuō)的內(nèi)存泄漏是指堆內(nèi)存的泄漏。堆內(nèi)存是指程序從堆中分配的、大 小任意的、使用完后必須顯示釋放的內(nèi)存。應(yīng)用程序一般使用new等函數(shù)從堆中分配到一 塊內(nèi)存,使用完后,程序必須負(fù)責(zé)調(diào)用相應(yīng)的函數(shù)釋放該內(nèi)存塊,否則,這塊內(nèi)存就不能被 再次使用,我們就說(shuō)這塊內(nèi)存泄漏了。有些情況下,編碼工程做得很龐大,分為多個(gè)模塊,模塊之間又有嵌套,當(dāng)在調(diào)試 (Debug)模式下運(yùn)行程序時(shí),如果有內(nèi)存泄露,那么輸出窗口會(huì)出現(xiàn)“detect memory leak" 的提示信息,有時(shí)我們可以根據(jù)具體的提示找到出現(xiàn)內(nèi)存泄露的地方,如通過(guò)雙擊調(diào)試的 指示信息可以定位到程序代碼處。有些情況下,不能根據(jù)列出的內(nèi)存泄露的信息具體定位 到程序的某行,則需要編程人員逐行逐行依次查找,此時(shí),工作量是十分龐大的?,F(xiàn)在技術(shù)中給出了檢測(cè)內(nèi)存泄露的專用工具如boundschecker、VisualLeak Detector等,其專門(mén)用于代碼檢測(cè)。上述工具需要單獨(dú)安裝,當(dāng)編程語(yǔ)言開(kāi)發(fā)工具啟動(dòng)的時(shí) 候能夠自動(dòng)嵌入該編程軟件的工具欄中。但通常安裝此類軟件最顯著的缺點(diǎn)是它對(duì)資源的 占用多,使得編程開(kāi)發(fā)的程序運(yùn)行起來(lái)很慢;另外,對(duì)一般的開(kāi)發(fā)人員來(lái)講,此類檢測(cè)工具 的功能太過(guò)于繁瑣和復(fù)雜,而用戶一般只需要檢測(cè)內(nèi)存是泄漏,如果電腦配置不高,程序啟 動(dòng)就很緩慢??傊枰绢I(lǐng)域技術(shù)人員迫切解決的一個(gè)技術(shù)問(wèn)題就是如何能夠提供一種檢 測(cè)內(nèi)存泄露的方法,檢測(cè)方法快捷,方便用戶的使用。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問(wèn)題是提供一種檢測(cè)內(nèi)存泄露的方法和裝置,提高了檢測(cè) 效率,方便用戶的使用。為了解決上述問(wèn)題,本發(fā)明公開(kāi)了一種檢測(cè)內(nèi)存泄露的方法,包括從待檢測(cè)的源代碼程序中選取代碼模塊;在所述代碼模塊的前后分別添加標(biāo)簽,對(duì)所述標(biāo)簽申請(qǐng)內(nèi)存并不做內(nèi)存釋放;運(yùn)行程序,查找調(diào)試信息中所述標(biāo)簽對(duì)應(yīng)的內(nèi)存泄露提示信息;判斷所述標(biāo)簽對(duì)應(yīng)的內(nèi)存泄露提示信息之間是否有其它內(nèi)存泄露提示信息,若 是,則該代碼模塊的源代碼語(yǔ)句沒(méi)有內(nèi)存泄露;若否,則判斷該代碼模塊的源代碼語(yǔ)句存在 內(nèi)存泄露。
優(yōu)選的,所述標(biāo)簽為字符型指針、整型指針、單精度浮點(diǎn)型指針、雙精度浮點(diǎn)型指 針。優(yōu)選的,依次選取程序代碼中的各個(gè)代碼模塊,添加相應(yīng)的標(biāo)簽進(jìn)行內(nèi)存泄漏的 檢測(cè)。優(yōu)選的,針對(duì)源程序代碼中的各個(gè)代碼模塊,同時(shí)添加相應(yīng)的標(biāo)簽進(jìn)行內(nèi)存泄漏 的檢測(cè)。具體的,按執(zhí)行任務(wù)的類型從待檢測(cè)的程序代碼中選取代碼模塊。此外,本發(fā)明還公開(kāi)了一種檢測(cè)內(nèi)存泄露的裝置,包括代碼選取單元,用于從待檢測(cè)的源代碼程序中選取代碼模塊;標(biāo)簽添加單元,用于在所述代碼模塊的前后分別添加標(biāo)簽,對(duì)所述標(biāo)簽申請(qǐng)內(nèi)存 并不做內(nèi)存釋放;提示查找單元,用于運(yùn)行程序,查找調(diào)試信息中所述標(biāo)簽對(duì)應(yīng)的內(nèi)存泄露提示信 息;內(nèi)存檢測(cè)單元,用于判斷所述標(biāo)簽對(duì)應(yīng)的內(nèi)存泄露提示信息之間是否有其它內(nèi)存 泄露提示信息,若是,則該代碼模塊的源代碼語(yǔ)句存在內(nèi)存泄露;若否,則判斷該代碼模塊 的源代碼語(yǔ)句沒(méi)有內(nèi)存泄露。優(yōu)選的,所述標(biāo)簽為字符型指針、整型指針、單精度浮點(diǎn)型指針、雙精度浮點(diǎn)型指 針。優(yōu)選的,所述標(biāo)簽添加單元依次選取程序代碼中的各個(gè)代碼模塊,添加相應(yīng)的標(biāo) 簽;則所述內(nèi)存檢測(cè)單元依次對(duì)各個(gè)模塊進(jìn)行檢測(cè)。優(yōu)選的,所述標(biāo)簽添加單元針對(duì)程序代碼中的各個(gè)代碼模塊,同時(shí)添加相應(yīng)的標(biāo) 簽;則所述內(nèi)存檢測(cè)單元同時(shí)對(duì)各個(gè)模塊進(jìn)行檢測(cè)。具體的,所述代碼選取單元按執(zhí)行任務(wù)的類型從待檢測(cè)的程序代碼中選取代碼模 塊。與現(xiàn)有技術(shù)相比,本發(fā)明具有以下優(yōu)點(diǎn)本發(fā)明通過(guò)選取代碼模塊,在其前后加入標(biāo)簽,對(duì)所述標(biāo)簽申請(qǐng)內(nèi)存并不做內(nèi)存 釋放,由于該標(biāo)簽在源代碼程序中是可以定位的,因此,通過(guò)調(diào)試信息中標(biāo)簽的提示信息之 間否有內(nèi)存泄漏信息,對(duì)代碼模塊進(jìn)行判斷。通過(guò)本發(fā)明,不需要編程人員在整個(gè)源代碼程 序中逐行逐句的進(jìn)行查找,節(jié)省了檢測(cè)時(shí)間,提高了查找內(nèi)存泄露的效率,由于只需要申請(qǐng) 標(biāo)簽,不需要啟動(dòng)包括各種復(fù)雜功能的檢測(cè)工具,方便用戶的操作,有效的減少了各種檢測(cè) 工具運(yùn)行時(shí)對(duì)資源的占用。進(jìn)一步,本發(fā)明能夠同時(shí)對(duì)各個(gè)代碼模塊添加標(biāo)簽,同時(shí)進(jìn)行檢測(cè),因此,可以一 次性的檢測(cè)整個(gè)源代碼程序的各個(gè)部分,提高了內(nèi)存泄露的檢測(cè)速度。
圖1是本發(fā)明一種檢測(cè)內(nèi)存泄露的方法實(shí)施例的流程圖;圖2是本發(fā)明一種檢測(cè)內(nèi)存泄露的裝置實(shí)施例的結(jié)構(gòu)圖。
具體實(shí)施例方式為使本發(fā)明的上述目的、特征和優(yōu)點(diǎn)能夠更加明顯易懂,下面結(jié)合附圖和具體實(shí) 施方式對(duì)本發(fā)明作進(jìn)一步詳細(xì)的說(shuō)明。本發(fā)明的核心構(gòu)思在于,在待檢測(cè)的代碼模塊的前后加入標(biāo)簽,對(duì)所述標(biāo)簽申請(qǐng) 內(nèi)存并不作內(nèi)存釋放。則在運(yùn)行程序后調(diào)試信息中必然出現(xiàn)兩條與所述標(biāo)簽對(duì)應(yīng)的提示信 息,通過(guò)判斷兩條提示信息之間是否有其他的內(nèi)存泄漏信息,來(lái)判斷該代碼模塊的源代碼 語(yǔ)句是否有內(nèi)存泄露,方便用戶的查找。參照?qǐng)D1,示出了本發(fā)明一種檢測(cè)內(nèi)存泄露的方法實(shí)施例的流程圖,包括步驟101,從待檢測(cè)的源代碼程序中選取代碼模塊;通常,待檢測(cè)的源代碼程序中包含了大量的代碼語(yǔ)句,如果編程人員在原代碼語(yǔ) 句中編寫(xiě)錯(cuò)誤,申請(qǐng)了內(nèi)存卻沒(méi)有釋放,則不能快速的在大量的代碼語(yǔ)句中對(duì)該提示語(yǔ)句 進(jìn)行定位。本發(fā)明實(shí)施例從整個(gè)源代碼程序中選取一個(gè)模塊,對(duì)該代碼模塊進(jìn)行檢測(cè)。優(yōu)選的,按執(zhí)行任務(wù)的類型從待檢測(cè)的源代碼程序中選取代碼模塊。例如,在一個(gè)搖獎(jiǎng)源代碼程序中,其執(zhí)行的任務(wù)分別包括處理接收的信息;播出 前的準(zhǔn)備工作、播出信息、結(jié)束播出。則待檢測(cè)的源代碼程序如下所示void CMxProjectConverterDlg:Lottery (CArray messageAry){ProcessMessage (messageAry) ;//處理接收的消息,過(guò)濾手機(jī)號(hào)碼BeginPlayO ;//播出前的準(zhǔn)備工作Play (messageAry) ;//播出EndPlayO ;//結(jié)束播出}按照?qǐng)?zhí)行的任務(wù),整個(gè)源代碼程序可以分為處理代碼模塊、準(zhǔn)備代碼模塊、播出代 碼模塊、結(jié)束代碼模塊,四個(gè)代碼模塊。本步驟選擇第一個(gè)處理代碼模塊進(jìn)行內(nèi)存泄漏的檢 測(cè)。
釋放;
針
5
步驟102,在所述代碼模塊的前后分別添加標(biāo)簽,對(duì)所述標(biāo)簽申請(qǐng)內(nèi)存并不做內(nèi)存
根據(jù)上述步驟選擇的模塊,在處理代碼模塊的前面和后面添加兩個(gè)標(biāo)簽。 優(yōu)選的,所述標(biāo)簽為字符型指針、整型指針、單精度浮點(diǎn)型指針、雙精度浮點(diǎn)型指
在本發(fā)明的實(shí)施例中,所述標(biāo)簽為整型指針“ int ”。
如建立“int*pl = new int,,和“ int*p2 = new int”,則相應(yīng)的源代碼程序變?yōu)?br>
void CMxProjectConverterDlg:Lottery(CArray messageAry)
{
ProcessMessage(messageAry); BeginPlay (); int^pl = new int ; Play(messageAry);
int*p2 = new int ;EndPlay ();}步驟103,運(yùn)行程序,查找調(diào)試信息中所述標(biāo)簽對(duì)應(yīng)的內(nèi)存泄露提示信息;運(yùn)行上述代碼程序,則相應(yīng)的,在輸出窗口中顯示出該程序的調(diào)試信息。由于上述 步驟對(duì)pl、p2申請(qǐng)了內(nèi)存,沒(méi)有釋放代碼語(yǔ)句
"delete pi”,以及‘‘delete pi";
因此,在調(diào)試信息中必定出現(xiàn)兩個(gè)標(biāo)簽對(duì)應(yīng)的內(nèi)存泄露提示信息,查找到所述信
與標(biāo)簽Pl對(duì)應(yīng)的內(nèi)存泄露提示信息為
j e c t block
converter\ at 0x0C60B948,4
肩、ο“d: \ mxprojecconverter\mxpro mxprojectconverterdlgprojpro. cpp(311): {18487}normal bytes long.Data:< >CD CD CD CD”與標(biāo)簽pi對(duì)應(yīng)的內(nèi)存泄露提示信息為"d:\mxprojectconverter\mxprojectconverter\ mxprojectconverterdlgprojpro. cpp(287){16164}normal block at 0x0806CE90,4 bytes long.Data:< >CD CD CD CD”在32位的操作系統(tǒng)中,申請(qǐng)一個(gè)整型字節(jié)內(nèi)存,不對(duì)該塊內(nèi)存進(jìn)行釋放操作 (delete),由于32位操作系統(tǒng)中,整型指針的大小是4字節(jié),那么程序運(yùn)行結(jié)束后,則該語(yǔ) 句必然產(chǎn)生4個(gè)字節(jié)的內(nèi)存泄露G bytes long)。相應(yīng)的,如果所述標(biāo)簽為字符型指針(char),則產(chǎn)生1個(gè)字節(jié)的內(nèi)存泄露;如果所 述標(biāo)簽為單精度浮點(diǎn)型指針(float),則產(chǎn)生4個(gè)字節(jié)的內(nèi)存泄露;如果所述標(biāo)簽為雙精度 浮點(diǎn)型指針(double),則產(chǎn)生8個(gè)字節(jié)的內(nèi)存泄露。步驟104,判斷所述標(biāo)簽對(duì)應(yīng)的內(nèi)存泄露提示信息之間是否有其它內(nèi)存泄露提示 信息,若是,則該代碼模塊的源代碼語(yǔ)句沒(méi)有內(nèi)存泄露;若否,則判斷該代碼模塊的源代碼 語(yǔ)句存在內(nèi)存泄露。由于在代碼模塊的前后加入了兩個(gè)標(biāo)簽,如果所述兩個(gè)4字節(jié)內(nèi)存泄露信息之間 無(wú)其它泄露信息提示信息,則證明該代碼模塊中各個(gè)語(yǔ)句是無(wú)內(nèi)存泄露的。相應(yīng)的,用戶不 需要對(duì)該代碼模塊的各個(gè)語(yǔ)句查找內(nèi)存是否釋放,減少了工作量。否則,如果所述兩個(gè)4字節(jié)內(nèi)存泄露信息之間有其它泄露信息提示信息,則證明 該代碼模塊中各個(gè)語(yǔ)句存在內(nèi)存泄露。例如,輸出(Output)窗口的調(diào)試信息如下所示"MxPublic. DLL Terminating !MxModuleRC. DLL Terminating !Detected memory leaks !Dumping objects-)d : \ mxprojectconverter\mxprojectconverter\ mxprojectconverterdlgprojpro. cpp(311):{18487}normal block at 0x0C60B948,4bytes long.Data:<>CD CD CD CDd:\naxstormvc7\naxsystem\sys\naxitemtool\naxitemtoollnit. cpp (93):{15942}client block at 0x0C5850C8, subtype c0,2688 bytes long.a CNaxItemListDlg object at $0C5850C8,2688 bytes long.{15941}normal block at 0x0C570F88,22 bytes long.Data:<C| >B8 CE 43 7C 02 00 00 00 02 00 00 00 01 00 00 00{15940}normal block at 0x0C570F30,22 bytes long.Data:<C| >B8 CE 43 7C 02 00 00 00 02 00 00 00 01 00 00 00{15939}normal block at 0x0C570ED8,22 bytes long.Data:<C| >B8 CE 43 7C 02 00 00 00 02 00 00 00 01 00 00 00{15938}normal block at 0x0C58BlA0,22 bytes long.Data:<C| >B8 CE 43 7C 02 00 00 00 02 00 00 00 01 00 00 00d : \ mxprojectconverter\mxprojectconverter\ mxprojectconverterdlgprojpro.cpp(287):{15940}normal block at 0x0806CE90,4 bytes long.Data:<>CD CD CD CDObject dump complete.,,在代碼程序中沒(méi)有對(duì)內(nèi)存釋放,在調(diào)試信息中的內(nèi)存泄露提示信息中就一定會(huì)出 現(xiàn)其內(nèi)存泄露的提示。如上述信息所示,在兩個(gè)4字節(jié)內(nèi)存泄露(粗體標(biāo)出)之間有2688 字節(jié)和22字節(jié)的內(nèi)存泄露提示信息,則該代碼模塊有內(nèi)存泄露。相應(yīng)的,用戶只需要在該 代碼模塊中進(jìn)一步查找。進(jìn)一步,依次選取程序代碼中的各個(gè)代碼模塊,添加相應(yīng)的標(biāo)簽進(jìn)行內(nèi)存泄漏的 檢測(cè)。在本發(fā)明實(shí)施例中,依次選取各個(gè)代碼模塊進(jìn)行檢測(cè),如分別選取“準(zhǔn)備代碼模 塊”、“播出代碼模塊”、“結(jié)束代碼模塊”分別檢測(cè)。此外,對(duì)于一個(gè)代碼模塊,如果其包含的 代碼語(yǔ)句較多,還可以根據(jù)其執(zhí)行的任務(wù)進(jìn)一步劃分為較小的模塊,如將“播出代碼模塊” 劃分為“標(biāo)題播出代碼模塊”、“號(hào)碼滾動(dòng)代碼模塊”、“確定號(hào)碼代碼模塊”等,針對(duì)此類小型 的代碼模塊依次檢測(cè)。本發(fā)明實(shí)施例,通過(guò)選取一個(gè)代碼模塊,在其前后加入標(biāo)簽,由于該標(biāo)簽在源代碼 程序中是可以定位的,因此,通過(guò)調(diào)試信息中標(biāo)簽的提示信息之間否有內(nèi)存泄漏信息,對(duì)代 碼模塊進(jìn)行判斷。則不需要編程人員在整個(gè)源代碼程序中一行一行的進(jìn)行查找,節(jié)省了檢 測(cè)時(shí)間,提高了查找內(nèi)存泄露的效率,由于只需要設(shè)置兩個(gè)標(biāo)簽,不需要啟動(dòng)包括各種復(fù)雜 功能的檢測(cè)工具,方便用戶的操作,有效的減少了對(duì)資源的占用。在本發(fā)明的一個(gè)優(yōu)選實(shí)施例中,針對(duì)源程序代碼中的各個(gè)代碼模塊,同時(shí)添加相 應(yīng)的標(biāo)簽進(jìn)行內(nèi)存泄漏的檢測(cè)。由于所述標(biāo)簽產(chǎn)生的內(nèi)存泄露信息是可以在整個(gè)源代碼程序中定位的,如通過(guò)雙 擊定位。則通過(guò)同時(shí)對(duì)各個(gè)代碼模塊添加標(biāo)簽,同時(shí)檢測(cè),一次性的查找出出現(xiàn)內(nèi)存泄露的 代碼語(yǔ)句的范圍。例如,待檢測(cè)的源代碼程序包括代碼模塊A、代碼模塊B和代碼模塊C三部分,則在各個(gè)模塊之間加入標(biāo)簽,如下所示“int*ql = new int ;module A ;int*q2 = new int ;module B ;int*q3 = new int ;module C ;int氺q4 = new int ;“其中,以“module "module B”和“module C”分別代表代碼模塊Α、代碼模塊B 和代碼模塊C的代碼編程語(yǔ)句。則運(yùn)行程序后,Output窗口中必定出現(xiàn)針對(duì)ql、q2、q3和q4的四條內(nèi)存泄露提示 信息,如果第一條和第二條提示信息之間還有其他的內(nèi)存泄漏提示信息,則證明代碼模塊A 的源代碼語(yǔ)句中有內(nèi)存泄露;如果第二條和第三條提示信息之間還有其他的內(nèi)存泄漏提示 信息,則證明代碼模塊B的源代碼語(yǔ)句中有內(nèi)存泄露,以此類推。通過(guò)本發(fā)明實(shí)施例,能夠同時(shí)對(duì)各個(gè)代碼模塊添加標(biāo)簽,同時(shí)進(jìn)行檢測(cè),由于標(biāo)簽 產(chǎn)生的內(nèi)存泄露信息能夠在整個(gè)源代碼程序中定位,因此,可以一次性的檢測(cè)整個(gè)源代碼 程序的各個(gè)部分,提高了檢測(cè)效率。本發(fā)明實(shí)施例所述的申請(qǐng)內(nèi)存、釋放內(nèi)存不限于“neW”、“delete”語(yǔ)句,還可以通 過(guò)“malloc” “realloc”等函數(shù)分配到內(nèi)存,通過(guò)調(diào)用“free”函數(shù)釋放內(nèi)存。參照?qǐng)D2,示出了本發(fā)明一種檢測(cè)內(nèi)存泄露的裝置實(shí)施例的結(jié)構(gòu)圖,包括代碼選取單元201,用于從待檢測(cè)的源代碼程序中選取代碼模塊;標(biāo)簽添加單元202,用于在所述代碼模塊的前后分別添加標(biāo)簽,對(duì)所述標(biāo)簽申請(qǐng)內(nèi) 存并不做內(nèi)存釋放;提示查找單元203,用于運(yùn)行程序,查找調(diào)試信息中所述標(biāo)簽對(duì)應(yīng)的內(nèi)存泄露提示 fn息;內(nèi)存檢測(cè)單元204,用于判斷所述標(biāo)簽對(duì)應(yīng)的內(nèi)存泄露提示信息之間是否有其它 內(nèi)存泄露提示信息,若是,則該代碼模塊的源代碼語(yǔ)句存在內(nèi)存泄露;若否,則判斷該代碼 模塊的源代碼語(yǔ)句沒(méi)有內(nèi)存泄露。優(yōu)選的,所述標(biāo)簽為字符型指針、整型指針、單精度浮點(diǎn)型指針、雙精度浮點(diǎn)型指 針。在本發(fā)明的一個(gè)實(shí)施例中,所述標(biāo)簽添加單元依次選取程序代碼中的各個(gè)代碼模 塊,添加相應(yīng)的標(biāo)簽;則所述檢測(cè)單元依次對(duì)各個(gè)模塊進(jìn)行檢測(cè)。在本發(fā)明的優(yōu)選實(shí)施例中,所述標(biāo)簽添加單元針對(duì)程序代碼中的各個(gè)代碼模塊, 同時(shí)添加相應(yīng)的標(biāo)簽;則所述檢測(cè)單元同時(shí)對(duì)各個(gè)模塊進(jìn)行檢測(cè)。一次就可以對(duì)整個(gè)源代碼程序的各個(gè) 模塊同時(shí)進(jìn)行檢測(cè),提高了檢測(cè)的速度。優(yōu)選的,所述代碼選取單元按執(zhí)行任務(wù)的類型從待檢測(cè)的程序代碼中選取代碼模 塊。
8
本說(shuō)明書(shū)中的各個(gè)實(shí)施例均采用遞進(jìn)的方式描述,每個(gè)實(shí)施例重點(diǎn)說(shuō)明的都是與 其他實(shí)施例的不同之處,各個(gè)實(shí)施例之間相同相似的部分互相參見(jiàn)即可。對(duì)于裝置實(shí)施例 而言,由于其與方法實(shí)施例基本相似,所以描述的比較簡(jiǎn)單,相關(guān)之處參見(jiàn)方法實(shí)施例的部 分說(shuō)明即可。以上對(duì)本發(fā)明所提供的一種檢測(cè)內(nèi)存泄露的方法和裝置,進(jìn)行了詳細(xì)介紹,本文 中應(yīng)用了具體個(gè)例對(duì)本發(fā)明的原理及實(shí)施方式進(jìn)行了闡述,以上實(shí)施例的說(shuō)明只是用于幫 助理解本發(fā)明的方法及其核心思想;同時(shí),對(duì)于本領(lǐng)域的一般技術(shù)人員,依據(jù)本發(fā)明的思 想,在具體實(shí)施方式
及應(yīng)用范圍上均會(huì)有改變之處,綜上所述,本說(shuō)明書(shū)內(nèi)容不應(yīng)理解為對(duì) 本發(fā)明的限制。
權(quán)利要求
1.一種檢測(cè)內(nèi)存泄露的方法,其特征在于,包括 從待檢測(cè)的源代碼程序中選取代碼模塊;在所述代碼模塊的前后分別添加標(biāo)簽,對(duì)所述標(biāo)簽申請(qǐng)內(nèi)存并不做內(nèi)存釋放; 運(yùn)行程序,查找調(diào)試信息中所述標(biāo)簽對(duì)應(yīng)的內(nèi)存泄露提示信息; 判斷所述標(biāo)簽對(duì)應(yīng)的內(nèi)存泄露提示信息之間是否有其它內(nèi)存泄露提示信息,若是,則 該代碼模塊的源代碼語(yǔ)句沒(méi)有內(nèi)存泄露;若否,則判斷該代碼模塊的源代碼語(yǔ)句存在內(nèi)存 泄露。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述標(biāo)簽為字符型指針、整型指針、單精度浮點(diǎn)型指針、雙精度浮點(diǎn)型指針。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于,依次選取程序代碼中的各個(gè)代碼模塊,添加相應(yīng)的標(biāo)簽進(jìn)行內(nèi)存泄漏的檢測(cè)。
4.根據(jù)權(quán)利要求1所述的方法,其特征在于,針對(duì)源程序代碼中的各個(gè)代碼模塊,同時(shí)添加相應(yīng)的標(biāo)簽進(jìn)行內(nèi)存泄漏的檢測(cè)。
5.根據(jù)權(quán)利要求1所述的方法,其特征在于,按執(zhí)行任務(wù)的類型從待檢測(cè)的程序代碼中選取代碼模塊。
6.一種檢測(cè)內(nèi)存泄露的裝置,其特征在于,包括代碼選取單元,用于從待檢測(cè)的源代碼程序中選取代碼模塊; 標(biāo)簽添加單元,用于在所述代碼模塊的前后分別添加標(biāo)簽,對(duì)所述標(biāo)簽申請(qǐng)內(nèi)存并不 做內(nèi)存釋放;提示查找單元,用于運(yùn)行程序,查找調(diào)試信息中所述標(biāo)簽對(duì)應(yīng)的內(nèi)存泄露提示信息; 內(nèi)存檢測(cè)單元,用于判斷所述標(biāo)簽對(duì)應(yīng)的內(nèi)存泄露提示信息之間是否有其它內(nèi)存泄露 提示信息,若是,則該代碼模塊的源代碼語(yǔ)句存在內(nèi)存泄露;若否,則判斷該代碼模塊的源 代碼語(yǔ)句沒(méi)有內(nèi)存泄露。
7.根據(jù)權(quán)利要求6所述的裝置,其特征在于,所述標(biāo)簽為字符型指針、整型指針、單精度浮點(diǎn)型指針、雙精度浮點(diǎn)型指針。
8.根據(jù)權(quán)利要求6所述的裝置,其特征在于,所述標(biāo)簽添加單元依次選取程序代碼中的各個(gè)代碼模塊,添加相應(yīng)的標(biāo)簽; 則所述內(nèi)存檢測(cè)單元依次對(duì)各個(gè)模塊進(jìn)行檢測(cè)。
9.根據(jù)權(quán)利要求6所述的裝置,其特征在于,所述標(biāo)簽添加單元針對(duì)程序代碼中的各個(gè)代碼模塊,同時(shí)添加相應(yīng)的標(biāo)簽; 則所述內(nèi)存檢測(cè)單元同時(shí)對(duì)各個(gè)模塊進(jìn)行檢測(cè)。
10.根據(jù)權(quán)利要求6所述的裝置,其特征在于,所述代碼選取單元按執(zhí)行任務(wù)的類型從待檢測(cè)的程序代碼中選取代碼模塊。
全文摘要
本發(fā)明提供了一種檢測(cè)內(nèi)存泄露的方法和裝置,所述方法包括從待檢測(cè)的源代碼程序中選取代碼模塊;在所述代碼模塊的前后分別添加標(biāo)簽,對(duì)所述標(biāo)簽申請(qǐng)內(nèi)存并不做內(nèi)存釋放;運(yùn)行程序,查找調(diào)試信息中所述標(biāo)簽對(duì)應(yīng)的內(nèi)存泄露提示信息;判斷所述標(biāo)簽對(duì)應(yīng)的內(nèi)存泄露提示信息之間是否有其它內(nèi)存泄露提示信息,若是,則該代碼模塊的源代碼語(yǔ)句沒(méi)有內(nèi)存泄露;若否,則判斷該代碼模塊的源代碼語(yǔ)句存在內(nèi)存泄露。通過(guò)本發(fā)明,節(jié)省了檢測(cè)時(shí)間,提高了查找內(nèi)存泄露的效率,由于只需要申請(qǐng)標(biāo)簽,不需要啟動(dòng)包括各種復(fù)雜功能的檢測(cè)工具,方便用戶的操作,有效的減少了各種檢測(cè)工具運(yùn)行時(shí)對(duì)資源的占用。
文檔編號(hào)G06F11/36GK102117242SQ20091024431
公開(kāi)日2011年7月6日 申請(qǐng)日期2009年12月30日 優(yōu)先權(quán)日2009年12月30日
發(fā)明者劉衡娜, 呂精華, 沈季, 袁慧晶 申請(qǐng)人:新奧特(北京)視頻技術(shù)有限公司