亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種嵌入式設備及其檢測和定位內(nèi)存泄漏的方法

文檔序號:6330787閱讀:263來源:國知局
專利名稱:一種嵌入式設備及其檢測和定位內(nèi)存泄漏的方法
技術領域
本發(fā)明涉及一種嵌入式設備及其檢測和定位內(nèi)存泄漏的方法。
背景技術
在計算機科學中,內(nèi)存泄漏是指由于疏忽或錯誤造成的程序未能及時釋放已經(jīng)不再使用的內(nèi)存的情況。所以內(nèi)存泄漏并非指內(nèi)存在物理上的消失,而是應用程序分配某段內(nèi)存后,由于設計錯誤,失去了對該段內(nèi)存的控制,因而造成了內(nèi)存的浪費, 這塊內(nèi)存就不能被再次使用,我們就說這塊內(nèi)存泄漏了?,F(xiàn)有技術中的檢測內(nèi)存泄漏的方法,是通過建立動態(tài)存儲內(nèi)存塊信息的鏈表,并設定同一申請位置長生存時間內(nèi)存塊數(shù)量閾值;遍歷鏈表,檢查各鏈表元素存儲的內(nèi)存塊信息得到各內(nèi)存塊的生存時間,將各長生存時間內(nèi)存塊根據(jù)所述各長生存時間內(nèi)存塊被申請的位置分類,若同一申請位置上被申請的所述長生存時間內(nèi)存塊數(shù)量大于所述同一申請位置長生存時間內(nèi)存塊數(shù)量閾值,則認為所述各長生存時間內(nèi)存塊發(fā)生了內(nèi)存泄漏。這種檢測和定位內(nèi)存泄漏的方法需要增加內(nèi)存開銷,而且操作復雜,不利于測試人員進行代碼測試和定位內(nèi)存泄漏。發(fā)明內(nèi)容本發(fā)明的主要目的在于提出一種嵌入式設備及其檢測和定位內(nèi)存泄漏的方法,方便測試人員進行代碼測試和定位內(nèi)存泄漏。本發(fā)明公開了一種嵌入式設備檢測和定位內(nèi)存泄漏的方法,包括如下步驟第一步,利用接口函數(shù)顯示所有在記錄的內(nèi)存使用記錄,調用此函數(shù)獲取并記錄初始內(nèi)存使用情況;第二步,對所述嵌入式設備進行一系列相關操作,再回到初始狀態(tài),再次調用所述接口函數(shù)獲取并記錄實時內(nèi)存使用情況;第三步,比較所述初始內(nèi)存使用情況和實時內(nèi)存使用情況,所述實時內(nèi)存使用情況中未釋放的內(nèi)存即為泄漏內(nèi)存。本發(fā)明公開的檢測和定位內(nèi)存泄漏的方法,在所述第三步中還通過C語言的下述語句printf (“ \n% s: % s: % dXn",—FILE—,—FUNCTION—,—LINE—)來標記打印出所述嵌入式設備的源程序中導致內(nèi)存泄漏的文件名、函數(shù)名和行號。在所述第三步中,還將比較所述初始內(nèi)存使用情況和實時內(nèi)存使用情況的結果, 輸出到一個文件中。在所述第二步中,定義替換函數(shù)對產(chǎn)生內(nèi)存使用的函數(shù)和釋放內(nèi)存使用的函數(shù)進行宏替換,然后在所述替換函數(shù)中獲取并記錄內(nèi)存使用情況。本發(fā)明還公開了一種嵌入式設備,使用前述的檢測和定位內(nèi)存泄漏的方法,包括控制模塊,電源模塊,和一個以上的子功能模塊;還包括內(nèi)存泄漏的檢測和定位模塊;所述內(nèi)存泄漏的檢測和定位模塊進一步包括內(nèi)存使用情況函數(shù)的創(chuàng)建模塊,用于創(chuàng)建內(nèi)存使用情況函數(shù);子模塊進入之前內(nèi)存使用情況的獲取模塊,用于在調用所述子功能模塊之前獲取內(nèi)存使用情況;子模塊進入之后再退出的情況下內(nèi)存使用情況的獲取模塊,用于在調用過所述功能子模塊后獲取內(nèi)存使用情況;
兩者的比較模塊,用于比較調用所述功能子模塊之前和之后的內(nèi)存的使用情況;比較結果重定向給輸出模塊,用于將所述兩者的比較模塊獲得的內(nèi)存使用情況重定向輸出到指定文件里;根據(jù)輸出顯示內(nèi)存泄漏所在文件行號模塊,用于根據(jù)所述的重定向輸出文件顯示內(nèi)存泄漏的具體文件名。本發(fā)明公開的嵌入式設備,所述的一個以上的子功能模塊包括下載、多媒體、我的應用、視頻聊天、在線視頻、在線教育、資訊和網(wǎng)絡設置。本發(fā)明公開的一種嵌入式設備及其檢測內(nèi)存泄漏的方法,不用額外增加內(nèi)存開銷,操作簡單,方便測試人員進行代碼測試和定位內(nèi)存泄漏。


圖1為本發(fā)明的嵌入式設備檢測和定位內(nèi)存泄露情況的功能模塊示意圖。圖2為本發(fā)明的嵌入式設備檢測和定位內(nèi)存泄露情況的方法流程圖。
具體實施方式
下面結合附圖和具體實施方式
對本發(fā)明作進一步詳細說明。本發(fā)明提出了一種檢測和定位內(nèi)存泄漏的方法,如圖1所示為本發(fā)明的檢測和定位內(nèi)存泄露情況的功能模塊示意圖。技術方案由六個模塊組成內(nèi)存使用情況函數(shù)的創(chuàng)建模塊101、子模塊進入之前內(nèi)存使用情況的獲取模塊102、子模塊進入之后再退出的情況下內(nèi)存使用情況的獲取模塊103、兩者的比較模塊104、比較結果重定向給輸出模塊105、根據(jù)輸出顯示內(nèi)存泄漏所在文件行號模塊106。所述的內(nèi)存使用情況函數(shù)的創(chuàng)建模塊101指的是創(chuàng)建內(nèi)存使用情況函數(shù);所述的子模塊進入之前內(nèi)存使用情況的獲取模塊102指的是在子模塊進入功能之前獲取內(nèi)存使用情況;所述的子模塊進入之后再退出內(nèi)存使用情況的獲取模塊103指的是從進入子模塊后退出所述子模塊獲取此時內(nèi)存使用情況;所述的兩者的比較模塊104指的是比較進入子模塊功能之前和進入之后退出所述子模塊功能之后內(nèi)存的使用情況;所述的比較結果重定向給輸出模塊105指的是將進入子模塊功能之前和進入之后退出所述子模塊功能之后內(nèi)存的使用情況比較結果重定向輸出到指定文件里;所述的根據(jù)輸出顯示內(nèi)存泄漏所在文件行號模塊106指的是根據(jù)所述的重定向輸出文件顯示內(nèi)存泄漏的具體哪個文件的哪行沒有釋放內(nèi)存。一般嵌入式設備不僅包括電源模塊、控制模塊等硬件部分,在軟件上還分為若干個子功能模塊,例如網(wǎng)絡電視的子功能模塊有下載、多媒體、我的應用、視頻聊天、在線視頻、在線教育、資訊、網(wǎng)絡設置等,如果需要判斷下載子功能模塊代碼部分是否有內(nèi)存泄漏的情況,可以在進入下載子功能模塊之前獲取一次內(nèi)存使用情況,然后進入下載子功能模塊進行若干次操作,例如進行電視劇下載、電影下載、我的下載、影視搜索等之后再退出,然后再獲取一次內(nèi)存使用情況,比較兩者的差別,且將差別輸出到一個文件例如memoryuse. txt文件里,屏幕打印出對比結果,顯示具體哪一個文件的具體哪一個行號分配的內(nèi)存沒有釋放,導致內(nèi)存泄漏。在現(xiàn)有技術中是通過檢查特定內(nèi)存塊的信息來得到內(nèi)存塊的生存時間,本發(fā)明是對產(chǎn)生內(nèi)存使用的函數(shù)和釋放內(nèi)存使用的函數(shù)進行宏替換,用自己的函數(shù)替換malloc等產(chǎn)生內(nèi)存使用的函數(shù)和free等產(chǎn)生釋放內(nèi)存的函數(shù)。在自己的函數(shù)中對內(nèi)存使用情況作記錄,從而“獲取內(nèi)存使用情況”來獲取內(nèi)存的使用和釋放,判斷內(nèi)存是否泄漏。如圖2所示為本發(fā)明的檢測和定位內(nèi)存泄露情況的方法流程圖,在檢測和定位內(nèi)存泄漏功能模塊中,首先獲取進入子模塊之前的內(nèi)存使用情況,然后再獲取進入子模塊之后再退出的內(nèi)存使用情況,然后比較前述兩種內(nèi)存使用情況,判斷兩者是否有差別,如果有差別則分別打印前后內(nèi)存使用情況,再比較前后內(nèi)存使用情況,并且將比較結果重新定向到一個文件里,退出即可。如果沒有差別,則直接退出。在圖2中,“分別打印前后內(nèi)存使用情況”,是在串口輸出終端上用printf打印出來的信息,不是人工比較前后內(nèi)存使用情況,是控制中心自動對代碼進行比較,并且將比較結果顯示出來,所謂重定向就是不想讓打印輸出的東西在終端上顯示,而是輸出到一個指定的文件里,例如文本文件里。
以下為本發(fā)明的C語言程序源代碼 #define FILENAME 260
/*結構定義 */
typedef struct
{
void^pMem ; int iSize ;
char szFile[FILENAME—MAX]; int iLine ; }MEM_USE_T ;
typedef std::map〈void*,MEM—USE_T>stl—mapMemUse ; typedef stl—mapMemUse:: iterator stl—mapMemUseIter ;
/*本地變量 */
static stl—mapMemUse lc—mapMemUse ; /*
//功能
//內(nèi)存分配調試初始化
//參數(shù)
//無
//返回值
//無 */
void KKMEMJnit(void)
{
lc—mapMemUse· clear ();
}/*Il 功能//記錄內(nèi)存分配信息// 參數(shù)//iSize-分配的大小//pszFiIeName-調用此函數(shù)的文件名//iLine- 調用此函數(shù)的行號//返回值//分配的內(nèi)存地址*/void*KKMEM_Malloc(size_t iSize, const char*pszFileName, int iLine){MEM_USE_T stMemUse ;strncpy (stMemUse. szFile, pszFileName, FILENAME_MAX);stMemUse. szFile[FILENAME_MAX_1] = 0;stMemUse. iLine = iLine ;stMemUse. iSize = iSize ;stMemUse. pMem = malloc(iSize);lc_mapMemUse[stMemUse. pMem] = stMemUse ;return stMemUse. pMem ;}

Il功能
//釋放分配的內(nèi)存
//參數(shù)
//pMem-分配的內(nèi)存地址
//pszFileName-調用此函數(shù)的文件名 //iLine- 調用此函數(shù)的行號 //返回值
//無 */
void KKMEM—Free (void*pMem,const char*pszFileName,int iLine)
{
stl—mapMemUselter iter ;
if ((iter = lc—mapMemUse. find(pMem)) == lc—mapMemUse. end ())
{
const char^pszShortName = strrchr(pszFileName,, Γ ); if (pszShortName == NULL)
{pszShortName = strrchr (pszFileName,,\\,);}if (pszShortName == NULL){pszShortName = pszFileName ;}else{++pszShortName ;}fprintf (stderr, 〃 氺氺氺氺氺氺氺氺氺ERROR 丨,free pMem = % p not in records !pos = % s: % d*****\n〃 , pMem,pszShortName, iLine);free (pMem);}else{free (pMem);lc_mapMemUse. erase (pMem);}}在上述源代碼中,有3個功能模塊1.內(nèi)存分配調試初始化;2.記錄內(nèi)存分配信 息;3.釋放分配的內(nèi)存。本發(fā)明提供的接ロ函數(shù)顯示所有在記錄的內(nèi)存使用記錄,調用此 函數(shù)獲取內(nèi)存使用情況,進行一系列操作后再回到初始狀態(tài),再次調用此函數(shù)獲取內(nèi)存使 用情況,二者對比即可發(fā)現(xiàn)分配后未釋放的內(nèi)存,以及產(chǎn)生這些內(nèi)存使用的文件和行號。在 哪里分配內(nèi)存的,可以通過下述語句printf (“ \n% s: % s: % dXn",—FILE—,—FUNCTION—,—LINE—)來標記打 印出文件名、函數(shù)名和行號。以上所述僅為本發(fā)明的較佳實施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精 神和原則之內(nèi)所作的任何修改、等同替換和改進等,均應包含在本發(fā)明的保護范圍之內(nèi)
權利要求
1.一種嵌入式設備檢測和定位內(nèi)存泄漏的方法,其特征在于,包括如下步驟第一步, 利用接口函數(shù)顯示所有在記錄的內(nèi)存使用記錄,調用此函數(shù)獲取并記錄初始內(nèi)存使用情況;第二步,對所述嵌入式設備進行一系列相關操作,再回到初始狀態(tài),再次調用所述接口函數(shù)獲取并記錄實時內(nèi)存使用情況;第三步,比較所述初始內(nèi)存使用情況和實時內(nèi)存使用情況,所述實時內(nèi)存使用情況中未釋放的內(nèi)存即為泄漏內(nèi)存。
2.如權利要求1所述的檢測和定位內(nèi)存泄漏的方法,其特征在于,在所述第三步中還通過C語言的下述語句printf (“ \n% s: % s: % dXn",—FILE—,—FUNCTION—,—LINE—)來標記打印出所述嵌入式設備的源程序中導致內(nèi)存泄漏的文件名、函數(shù)名和行號。
3.如權利要求1所述的檢測和定位內(nèi)存泄漏的方法,其特征在于,在所述第三步中,還將比較所述初始內(nèi)存使用情況和實時內(nèi)存使用情況的結果,輸出到一個文件中。
4.如權利要求1所述的檢測和定位內(nèi)存泄漏的方法,其特征在于,在所述第二步中,定義替換函數(shù)對產(chǎn)生內(nèi)存使用的函數(shù)和釋放內(nèi)存使用的函數(shù)進行宏替換,然后在所述替換函數(shù)中獲取并記錄內(nèi)存使用情況。
5.一種嵌入式設備,使用如權利要求1至4所述的方法,包括控制模塊,電源模塊,和一個以上的子功能模塊;其特征在于,還包括內(nèi)存泄漏的檢測和定位模塊;所述內(nèi)存泄漏的檢測和定位模塊進一步包括內(nèi)存使用情況函數(shù)的創(chuàng)建模塊,用于創(chuàng)建內(nèi)存使用情況函數(shù);子模塊進入之前內(nèi)存使用情況的獲取模塊,用于在調用所述子功能模塊之前獲取內(nèi)存使用情況;子模塊進入之后再退出的情況下內(nèi)存使用情況的獲取模塊,用于在調用過所述功能子模塊后獲取內(nèi)存使用情況;兩者的比較模塊,用于比較調用所述功能子模塊之前和之后的內(nèi)存的使用情況;比較結果重定向給輸出模塊,用于將所述兩者的比較模塊獲得的內(nèi)存使用情況重定向輸出到指定文件里;根據(jù)輸出顯示內(nèi)存泄漏所在文件行號模塊,用于根據(jù)所述的重定向輸出文件顯示內(nèi)存泄漏的具體文件名。
6.如權利要求5所述的嵌入式設備,其特征在于,所述的一個以上的子功能模塊包括 下載、多媒體、我的應用、視頻聊天、在線視頻、在線教育、資訊和網(wǎng)絡設置。
全文摘要
本發(fā)明涉及一種嵌入式設備及其檢測和定位內(nèi)存泄漏的方法,包括如下步驟第一步,利用接口函數(shù)顯示所有在記錄的內(nèi)存使用記錄,調用此函數(shù)獲取并記錄初始內(nèi)存使用情況;第二步,對所述嵌入式設備進行一系列相關操作,再回到初始狀態(tài),再次調用所述接口函數(shù)獲取并記錄實時內(nèi)存使用情況;第三步,比較所述初始內(nèi)存使用情況和實時內(nèi)存使用情況,所述實時內(nèi)存使用情況中未釋放的內(nèi)存即為泄漏內(nèi)存。本發(fā)明公開的一種嵌入式設備及其檢測和定位內(nèi)存泄漏的方法,不用額外增加內(nèi)存開銷,操作簡單,方便測試人員進行代碼測試和定位內(nèi)存泄漏。
文檔編號G06F11/34GK102375776SQ201010261728
公開日2012年3月14日 申請日期2010年8月18日 優(yōu)先權日2010年8月18日
發(fā)明者何銀南, 蔡章盛 申請人:康佳集團股份有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1