內(nèi)存泄露定位方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計算機領(lǐng)域,尤其涉及一種內(nèi)存泄露定位方法及裝置。
【背景技術(shù)】
[0002]系統(tǒng)在程序運行的過程中,可能發(fā)生頻繁死機或無法正常工作的現(xiàn)象,即系統(tǒng)崩潰。
[0003]導致系統(tǒng)崩潰的原因很多,比如,系統(tǒng)中存在病毒,或者,運行的程序中存在漏洞(bug),或者,內(nèi)存泄漏等。其中,內(nèi)存泄露是指在程序運行時,系統(tǒng)不斷的為正在運行的程序分配內(nèi)存,并將指向內(nèi)存的指針保存在一個數(shù)據(jù)存儲中,直到程序退出時,才依次釋放指針所指向的內(nèi)存塊,該指針為存儲在數(shù)據(jù)存儲中的指針。
[0004]然而在發(fā)生內(nèi)存泄漏的場景下,本領(lǐng)域技術(shù)人員無法定位內(nèi)存泄漏的具體位置。
【發(fā)明內(nèi)容】
[0005]本發(fā)明提供一種內(nèi)存泄漏定位方法及裝置,用以解決無法定位內(nèi)存泄漏的具體位置的問題。
[0006]本發(fā)明的第一個方面是提供一種內(nèi)存泄露定位方法,包括:
[0007]獲取文件信息和內(nèi)存地址信息,所述文件信息包括觸發(fā)分配內(nèi)存的文件名稱和文件行號,所述內(nèi)存地址信息包括指向所分配內(nèi)存的指針值信息,所述分配內(nèi)存包括為所述文件行號指示的文件所分配的內(nèi)存,所述文件行號為所述文件名稱指示的文件的行號;
[0008]將所述文件信息和所述內(nèi)存地址信息存儲在數(shù)據(jù)結(jié)構(gòu)中,用于在發(fā)生內(nèi)存泄漏時確定內(nèi)存泄漏的位置。
[0009]進一步的,所述將所述文件信息和所述內(nèi)存地址信息存儲在數(shù)據(jù)結(jié)構(gòu)中,用于確定為文件行號分配的內(nèi)存信息,包括:
[0010]將所述內(nèi)存地址信息存儲在數(shù)據(jù)結(jié)構(gòu)的鍵key值;
[0011]將所述文件信息存儲在所述數(shù)據(jù)結(jié)構(gòu)的數(shù)據(jù)value值。
[0012]進一步的,還包括:
[0013]獲取刪除指令,所述刪除指令包括指示刪除第一數(shù)據(jù)項;
[0014]根據(jù)所述刪除指令,刪除所述數(shù)據(jù)結(jié)構(gòu)中的所述第一數(shù)據(jù)項;
[0015]根據(jù)所述刪除指令,釋放所述第一數(shù)據(jù)項指示的內(nèi)存。
[0016]進一步的,還包括:
[0017]確定程序退出;
[0018]確定所述數(shù)據(jù)結(jié)構(gòu)當前存儲的剩余數(shù)據(jù)項;
[0019]釋放所述剩余數(shù)據(jù)項指示的內(nèi)存。
[0020]進一步的,所述數(shù)據(jù)結(jié)構(gòu)為map數(shù)據(jù)結(jié)構(gòu)。
[0021]本發(fā)明的第二個方面是提供一種內(nèi)存泄漏定位裝置,包括:
[0022]獲取模塊,用于獲取文件信息和內(nèi)存地址信息,所述文件信息包括觸發(fā)分配內(nèi)存的文件名稱和文件行號,所述內(nèi)存地址信息包括指向所分配內(nèi)存的指針值信息,所述分配內(nèi)存包括為所述文件行號指示的文件所分配的內(nèi)存,所述文件行號為所述文件名稱指示的文件的行號;
[0023]存儲模塊,用于將所述文件信息和所述內(nèi)存地址信息存儲在數(shù)據(jù)結(jié)構(gòu)中,用于在發(fā)生內(nèi)存泄漏時確定內(nèi)存泄漏的位置。
[0024]進一步的,所述存儲模塊,具體用于將所述內(nèi)存地址信息存儲在數(shù)據(jù)結(jié)構(gòu)的鍵key值;將所述文件信息存儲在所述數(shù)據(jù)結(jié)構(gòu)的數(shù)據(jù)value值。
[0025]進一步的,所述獲取模塊,還用于獲取刪除指令,所述刪除指令包括指示刪除第一數(shù)據(jù)項;根據(jù)所述刪除指令,刪除所述數(shù)據(jù)結(jié)構(gòu)中的所述第一數(shù)據(jù)項;根據(jù)所述刪除指令,釋放所述第一數(shù)據(jù)項指示的內(nèi)存。
[0026]進一步的,還包括:確定模塊;
[0027]所述確定模塊,用于確定程序退出;確定所述數(shù)據(jù)結(jié)構(gòu)當前存儲的剩余數(shù)據(jù)項;釋放所述剩余數(shù)據(jù)項指示的內(nèi)存。
[0028]進一步的,所述數(shù)據(jù)結(jié)構(gòu)為map數(shù)據(jù)結(jié)構(gòu)。
[0029]在本實施例中,獲取文件信息和內(nèi)存地址信息,所述文件信息包括觸發(fā)分配內(nèi)存的文件名稱和文件行號,所述內(nèi)存地址信息包括指向所分配內(nèi)存的指針值信息,所述分配內(nèi)存包括為所述文件行號指示的文件所分配的內(nèi)存,所述文件行號為所述文件名稱指示的文件的行號;將所述文件信息和所述內(nèi)存地址信息存儲在數(shù)據(jù)結(jié)構(gòu)中,用于在發(fā)生內(nèi)存泄漏時確定內(nèi)存泄漏的位置。實現(xiàn)了對分配內(nèi)存的定位,從而可以在發(fā)生內(nèi)存泄漏時,根據(jù)分配內(nèi)存的定位信息,確定內(nèi)存泄漏的位置。
【附圖說明】
[0030]圖1為本發(fā)明內(nèi)存泄露定位方法一實施例的流程示意圖;
[0031]圖2為本發(fā)明內(nèi)存泄露定位裝置一實施例的結(jié)構(gòu)示意圖;
[0032]圖3為本發(fā)明內(nèi)存泄露定位裝置二實施例的結(jié)構(gòu)示意圖。
【具體實施方式】
[0033]為使本發(fā)明實施例的目的、技術(shù)方案和優(yōu)點更加清楚,下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
[0034]圖1為本發(fā)明內(nèi)存泄露定位方法一實施例的流程示意圖,如圖1所示,內(nèi)存分配的監(jiān)測方法,包括:
[0035]步驟101、獲取文件信息和內(nèi)存地址信息。
[0036]在本實施例中,所述文件信息包括觸發(fā)分配內(nèi)存的文件名稱和文件行號,所述內(nèi)存地址信息包括指向所分配內(nèi)存的指針值信息,所述分配內(nèi)存包括為所述文件行號指示的文件所分配的內(nèi)存,所述文件行號為所述文件名稱指示的文件的行號。
[0037]本實施例的適用場景是在分配內(nèi)存時,例如,在調(diào)用申請內(nèi)存模塊(new)函數(shù)時。
[0038]舉例來講,重載申請內(nèi)存模塊(new)函數(shù),實現(xiàn)對文件信息和內(nèi)存地址信息的獲取,具體的,new (size_t nSize char*Fi 1 eName int LineNum),其中 nSize 為申請的內(nèi)存大小,F(xiàn)ileName為被調(diào)用時所在的文件名,LineNum為調(diào)用時所在的文件行號。
[0039]步驟102、將所述文件信息和所述內(nèi)存地址信息存儲在數(shù)據(jù)結(jié)構(gòu)中,用于在發(fā)生內(nèi)存泄漏時確定內(nèi)存泄漏的位置。
[0040]舉例來講,使用預(yù)編譯宏—FILE—和—LINE—在編譯時在指定位置展開為該文件的文件名和該行的行號。
[0041]具體的,將所述內(nèi)存地址信息存儲在數(shù)據(jù)結(jié)構(gòu)的鍵key值;將所述文件信息存儲在所述數(shù)據(jù)結(jié)構(gòu)的數(shù)據(jù)value值。
[0042]在本實施例中,獲取文件信息和內(nèi)存地址信息,所述文件信息包括觸發(fā)分配內(nèi)存的文件名稱和文件行號,所述內(nèi)存地址信息包括指向所分配內(nèi)存的指針值信息,所述分配內(nèi)存包括為所述文件行號指示的文件所分配的內(nèi)存,所述文件行號為所述文件名稱指示的文件的行號;將所述文件信息和所述內(nèi)存地址信息存儲在數(shù)據(jù)結(jié)構(gòu)中,用于在發(fā)生內(nèi)存泄漏時確定內(nèi)存泄漏的位置。實現(xiàn)了對分配內(nèi)存的定位,從而可以在發(fā)生內(nèi)存泄漏時,根據(jù)分配內(nèi)存的定位信息,確定內(nèi)存泄漏的位置。
[0043]在上述實施例的基礎(chǔ)上,該實施例還可以包括:
[0044]獲取刪除指令,所述刪除指令包括指示刪除第一數(shù)據(jù)項;
[0045]根據(jù)所述刪除指令,刪除所述數(shù)據(jù)結(jié)構(gòu)中的所述第一數(shù)據(jù)項;