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