專利名稱:移動(dòng)終端及其內(nèi)存泄露檢測(cè)方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種移動(dòng)終端內(nèi)存泄露檢測(cè)方法,特別適用于手機(jī)等移動(dòng)通信終端, 及帶界面操作的嵌入式設(shè)備。
背景技術(shù):
現(xiàn)在的移動(dòng)終端(如手機(jī)系統(tǒng))已經(jīng)非常龐大,用記錄所有內(nèi)存分配和釋放記錄來(lái)確定內(nèi)存泄露將是非常艱難的,許多內(nèi)存的分配本來(lái)就是一次性的,直到關(guān)機(jī)都不會(huì)被釋放,通過(guò)記錄所有內(nèi)存的信息來(lái)定位內(nèi)存泄露就顯得效率低下,代價(jià)比較大,特別是有些內(nèi)存泄露甚至是手機(jī)內(nèi)部的交互事件引起的,傳統(tǒng)的方法根本無(wú)法覺察到!
發(fā)明內(nèi)容
本發(fā)明要解決的技術(shù)問(wèn)題是為了克服現(xiàn)有技術(shù)中移動(dòng)終端內(nèi)存泄露檢測(cè)效率低下等缺陷,提供一種高效率和快速的移動(dòng)終端及其內(nèi)存泄露檢測(cè)方法。本發(fā)明是通過(guò)下述技術(shù)方案來(lái)解決上述技術(shù)問(wèn)題的一種移動(dòng)終端,其特點(diǎn)在于,其包括一命令解析模塊,用于接收并且分析pc發(fā)送過(guò)來(lái)的數(shù)據(jù)然后執(zhí)行對(duì)應(yīng)的操作,對(duì)各模塊進(jìn)行測(cè)試;—內(nèi)存記錄模塊,用于記錄分配內(nèi)存的地址、函數(shù)名和行數(shù),及釋放內(nèi)存的時(shí)候刪除該記錄;一數(shù)據(jù)分析模塊,用于打印并分析未被釋放的內(nèi)存信息。較佳地,打印信息中只出現(xiàn)一次的是屬于被測(cè)試模塊一次性分配的數(shù)據(jù),不屬于泄漏;打印信息中重復(fù)多次出現(xiàn)的數(shù)據(jù),則為內(nèi)存泄漏。較佳地,該移動(dòng)終端為移動(dòng)通信終端或帶界面操作的嵌入式設(shè)備。本發(fā)明的另一技術(shù)方案為一種所述移動(dòng)終端的內(nèi)存泄露檢測(cè)方法,其特點(diǎn)在于, 其包括如下步驟S1、使移動(dòng)終端的被測(cè)試模塊處于初始入口狀態(tài),在PC端發(fā)送啟動(dòng)內(nèi)存檢測(cè)命令, 移動(dòng)終端啟動(dòng)內(nèi)存記錄模塊;&、手動(dòng)操作進(jìn)入移動(dòng)終端的被檢測(cè)模塊,對(duì)該被檢測(cè)模塊進(jìn)行各項(xiàng)功能操作,然后回到初始入口狀態(tài);S3、重復(fù)步驟&,此時(shí)的操作包含步驟&中的操作,同時(shí)也可以進(jìn)行更多的操作, 再次返回初始入口狀態(tài);、、在PC端發(fā)送停止內(nèi)存檢測(cè)命令,同時(shí)接收移動(dòng)終端發(fā)送來(lái)的內(nèi)存分配信息數(shù)據(jù)。較佳地,打印信息中只出現(xiàn)一次的是屬于被測(cè)試模塊一次性分配的數(shù)據(jù),不屬于泄漏;打印信息中重復(fù)多次出現(xiàn)的數(shù)據(jù),則為內(nèi)存泄漏。較佳地,步驟&中的對(duì)被測(cè)試模塊的各項(xiàng)功能操作包括反復(fù)開啟關(guān)閉該模塊,使用該模塊的某些功能以及并發(fā)運(yùn)行其他模塊。較佳地,在步驟S1I3中初始入口狀態(tài)保持一致,即移動(dòng)終端的顯示界面、開啟的應(yīng)用、硬件外設(shè)和工作狀態(tài)均保持一致。本發(fā)明的積極進(jìn)步效果在于本發(fā)明內(nèi)存泄露檢測(cè)方法可以提高檢測(cè)的速度,精確度。具有很強(qiáng)的可操作性,甚至可以作為移動(dòng)終端的一個(gè)常駐模塊,由測(cè)試人員來(lái)操作發(fā)現(xiàn)問(wèn)題。采用本發(fā)明的方法,可以很全面的檢測(cè)手機(jī)系統(tǒng)具體模塊的內(nèi)存泄漏,覆蓋更多的測(cè)試路徑,使內(nèi)存泄露檢查全面、快速。
圖1為本發(fā)明的移動(dòng)終端的模塊圖。圖2為本發(fā)明的內(nèi)存泄露檢測(cè)方法的流程圖。圖3為本發(fā)明的手機(jī)與pc機(jī)數(shù)據(jù)交互流程圖。圖4為本發(fā)明的內(nèi)存分配信息數(shù)據(jù)分析圖。
具體實(shí)施例方式下面結(jié)合附圖給出本發(fā)明較佳實(shí)施例,以詳細(xì)說(shuō)明本發(fā)明的技術(shù)方案。如圖1-4所示,本發(fā)明的移動(dòng)終端,包括一命令解析模塊1,用于接收并且分析pc 發(fā)送過(guò)來(lái)的數(shù)據(jù)然后執(zhí)行對(duì)應(yīng)的操作,對(duì)各模塊進(jìn)行測(cè)試,一般的嵌入式設(shè)備都具備與PC 交互數(shù)據(jù)的功能,本發(fā)明在其基礎(chǔ)上擴(kuò)展一個(gè)pc對(duì)手機(jī)的命令項(xiàng)即可;一內(nèi)存記錄模塊2, 用于記錄分配內(nèi)存的地址、函數(shù)名和行數(shù),及釋放內(nèi)存的時(shí)候刪除該記錄;一數(shù)據(jù)分析模塊 3,用于打印并分析未被釋放的內(nèi)存信息。其中,該移動(dòng)終端可以為移動(dòng)通信終端或帶界面操作的嵌入式設(shè)備。其中停止內(nèi)存記錄模塊的時(shí)候,打印未被釋放的內(nèi)存信息。而本發(fā)明的移動(dòng)終端的內(nèi)存泄露檢測(cè)方法,至少要包括如下步驟S1、使移動(dòng)終端的被測(cè)試模塊處于初始入口狀態(tài),在PC端發(fā)送啟動(dòng)內(nèi)存檢測(cè)命令, 移動(dòng)終端啟動(dòng)內(nèi)存記錄模塊;&、手動(dòng)操作進(jìn)入移動(dòng)終端的被檢測(cè)模塊,對(duì)該被檢測(cè)模塊進(jìn)行各項(xiàng)功能操作,然后回到初始入口狀態(tài);&、重復(fù)步驟&,此時(shí)的操作包含步驟&中的操作,同時(shí)也可以進(jìn)行更多的操作, 再次返回初始入口狀態(tài);、、在PC端發(fā)送停止內(nèi)存檢測(cè)命令,同時(shí)接收移動(dòng)終端發(fā)送來(lái)的內(nèi)存分配信息數(shù)據(jù)。本發(fā)明的總體思想為首先確定手機(jī)初始狀態(tài),然后對(duì)手機(jī)進(jìn)行一系列可以重復(fù)進(jìn)行的操作,然后再退回到手機(jī)的初始狀態(tài),通過(guò)分析內(nèi)存分配的增量信息即可以準(zhǔn)確定位手機(jī)內(nèi)存泄露!本實(shí)施例中,移動(dòng)終端選用手機(jī),被測(cè)試模塊以藍(lán)牙模塊為例加以說(shuō)明。如圖2,步驟101,先使手機(jī)處于藍(lán)牙入口界面(初始狀態(tài)A),通過(guò)數(shù)據(jù)線連接pc 機(jī)與手機(jī),PC端發(fā)送啟動(dòng)內(nèi)存記錄的命令,手機(jī)端接收到命令啟動(dòng)內(nèi)存記錄,此時(shí)開始記錄內(nèi)存的分配狀態(tài);步驟102,這時(shí)候可以進(jìn)入藍(lán)牙模塊菜單進(jìn)行操作,例如反復(fù)開啟關(guān)閉藍(lán)牙功能,搜索連接其他藍(lán)牙設(shè)備,設(shè)置藍(lán)牙可見狀態(tài),通過(guò)藍(lán)牙收發(fā)文件等,可以把要測(cè)試的模塊的各種功能都運(yùn)行一遍,交互事件也可以進(jìn)行,例如藍(lán)牙操作過(guò)程中撥打接聽電話, 播放音樂(lè)等,圖中這一系列操作稱為B。步驟103,然后返回到初始狀態(tài)A。之后步驟104, 再進(jìn)入藍(lán)牙模塊進(jìn)行各種操作,稱作為D,此時(shí)的操作應(yīng)包含上一次的操作,也可以進(jìn)行更多的操作,即數(shù)量上,D >= B。最后步驟105,再返回藍(lán)牙入口界面(狀態(tài)A)。步驟106, 再次通過(guò)pc端發(fā)送停止內(nèi)存檢測(cè)的命令,同時(shí)接收手機(jī)端發(fā)送過(guò)來(lái)的內(nèi)存分配信息數(shù)據(jù)。 上述步驟101 106在實(shí)際中的具體實(shí)現(xiàn)是本領(lǐng)域的現(xiàn)有技術(shù),并非本發(fā)明的發(fā)明點(diǎn)所在。其中,手機(jī)初始狀態(tài)與操作完成后返回的狀態(tài)一致包含以下幾個(gè)方面1、手機(jī)顯示界面處于一致;2、手機(jī)實(shí)際開啟應(yīng)用一致(例如,操作過(guò)程中開啟了藍(lán)牙模塊,回到原界面狀態(tài)的時(shí)候藍(lán)牙模塊也處于開啟狀態(tài));3、手機(jī)包含的硬件外設(shè)一致(例如開始的時(shí)候連接了藍(lán)牙耳機(jī),最后的狀態(tài)也必須是連接藍(lán)牙耳機(jī));4、工作狀態(tài)也應(yīng)保持一致(例如開始的時(shí)候有mp3背景播放,結(jié)束狀態(tài)也應(yīng)有mp3背景播放)。信息分析過(guò)程如圖4所示,步驟201,取內(nèi)存分配記錄;步驟202,打印信息中只出現(xiàn)一次的是屬于被測(cè)試模塊一次性分配的數(shù)據(jù),不屬于泄漏;步驟203,如果重復(fù)多次出現(xiàn)的數(shù)據(jù),則可以定性為內(nèi)存泄漏,進(jìn)行重點(diǎn)分析。其中,以一種編程語(yǔ)言為例,內(nèi)存記錄模塊的源代碼如下//初始化內(nèi)存記錄模塊的數(shù)組void mem—dbg init (void);Il分配內(nèi)存的時(shí)候記錄分配內(nèi)存信息的函數(shù)名和行數(shù)void mem—dbg_addr_record(void*pAddr, unsigned int bytes, char*fn, unsigned int In);
V內(nèi)存被釋放的時(shí)候清除記錄的信息void mem_dbg_addr_clesr(void^pAddr);
結(jié)束檢測(cè)的是時(shí)候?qū)⑿畔ump到pc端void mem—dbg—dump (void);//用于pc端發(fā)送命令給手機(jī)側(cè)的時(shí)候開始和結(jié)束監(jiān)控void mem_dbg_monitor(U32 bFlag);H----------------memory debug start-------------typedef S8 signed char ;typedef S32 int ;typedef U8 unsigned char ;
typedef U32 unsigned int ;typedef struct_MEM_DBG_TAG{S8 Record[72];U32 uMemAddr ;struct_MEM_DBG_TAG*pNext ;}T_MEM_DBG_CTRL ;#define MAX_DBG_CTRL 2400//可根據(jù)需要調(diào)整大小T_MEM_DBG_CTRL g_mem_dbg_ctrl[MAX_DBG_CTRL] = {0}
T_MEM_DBG_CTRL*p_mem_dbg_active = NULL ;T_MEM_DBG_CTRL*p_mem_dbg_free 二 NULL ;U32 g_mem_dbg_init_flag = FALSE ;/氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺*mem_dbg_init_initial record group when start^DESCRIPTION -**Input 氺Output 氺Returns *氺modification history氺--------------------氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺Ivoid mem_dbg_init (void){U32 ulndex = 0 ;for(ulndex = 0 ;ulndex < MAX_DBG_CTRL_1 ;ulndex++){g_mem_dbg_ctrl[ulndex] · pNext = &g_mem_dbg_ctrl[ulndex+l];}g_mem_dbg_ctrl [MAX_DBG_CTRL_1] · pNext = NULL ;p_mem_dbg_free = &g_mem_dbg_ctrl
;p_mem_db g_ac t i νe = NULL ;}/氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺*mem_dbg_addr_record-record the addr when malloc buffer^DESCRIPTION -*氺Input 氺Output :氺Returns *氺modification history氺--------------------氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺Ivoid mem—dbg_addr_record(void*pAddr, unsigned int bytes, char*fn,
unsigned int In)
{
權(quán)利要求
1.一種移動(dòng)終端,其特征在于,其包括一命令解析模塊,用于接收并且分析PC發(fā)送過(guò)來(lái)的數(shù)據(jù)然后執(zhí)行對(duì)應(yīng)的操作,對(duì)各模塊進(jìn)行測(cè)試;一內(nèi)存記錄模塊,用于記錄分配內(nèi)存的地址、函數(shù)名和行數(shù),及釋放內(nèi)存的時(shí)候刪除該記錄;一數(shù)據(jù)分析模塊,用于打印并分析未被釋放的內(nèi)存信息。
2.如權(quán)利要求1所述的移動(dòng)終端,其特征在于,打印信息中只出現(xiàn)一次的是屬于被測(cè)試模塊一次性分配的數(shù)據(jù),不屬于泄漏;打印信息中重復(fù)多次出現(xiàn)的數(shù)據(jù),則為內(nèi)存泄漏。
3.如權(quán)利要求1所述的移動(dòng)終端,其特征在于,該移動(dòng)終端為移動(dòng)通信終端或帶界面操作的嵌入式設(shè)備。
4.一種如權(quán)利要求1所述移動(dòng)終端的內(nèi)存泄露檢測(cè)方法,其特征在于,其包括如下步驟S1、使移動(dòng)終端的被測(cè)試模塊處于初始入口狀態(tài),在PC端發(fā)送啟動(dòng)內(nèi)存檢測(cè)命令,移動(dòng)終端啟動(dòng)內(nèi)存記錄模塊;S1&、手動(dòng)操作進(jìn)入移動(dòng)終端的被檢測(cè)模塊,對(duì)該被檢測(cè)模塊進(jìn)行各項(xiàng)功能操作,然后回到初始入口狀態(tài);S3、重復(fù)步驟S2,此時(shí)的操作包含步驟&中的操作,同時(shí)也可以進(jìn)行更多的操作,再次返回初始入口狀態(tài);、、在PC端發(fā)送停止內(nèi)存檢測(cè)命令,同時(shí)接收移動(dòng)終端發(fā)送來(lái)的內(nèi)存分配信息數(shù)據(jù)。
5.如權(quán)利要求4所述的內(nèi)存泄露檢測(cè)方法,其特征在于,打印信息中只出現(xiàn)一次的是屬于被測(cè)試模塊一次性分配的數(shù)據(jù),不屬于泄漏;打印信息中重復(fù)多次出現(xiàn)的數(shù)據(jù),則為內(nèi)存泄漏。
6.如權(quán)利要求4所述的內(nèi)存泄露檢測(cè)方法,其特征在于,步驟&中的對(duì)被測(cè)試模塊的各項(xiàng)功能操作包括反復(fù)開啟關(guān)閉該模塊,使用該模塊的某些功能以及并發(fā)運(yùn)行其他模塊。
7.如權(quán)利要求4所述的內(nèi)存泄露檢測(cè)方法,其特征在于,在步驟S1-S3中初始入口狀態(tài)保持一致,即移動(dòng)終端的顯示界面、開啟的應(yīng)用、硬件外設(shè)和工作狀態(tài)均保持一致。
全文摘要
本發(fā)明公開了一種移動(dòng)終端及其內(nèi)存泄露檢測(cè)方法,其包括一命令解析模塊,用于接收并且分析pc發(fā)送過(guò)來(lái)的數(shù)據(jù)然后執(zhí)行對(duì)應(yīng)的操作,對(duì)各模塊進(jìn)行測(cè)試;一內(nèi)存記錄模塊,用于記錄分配內(nèi)存的地址、函數(shù)名和行數(shù),及釋放內(nèi)存的時(shí)候刪除該記錄;一數(shù)據(jù)分析模塊,用于打印并分析未被釋放的內(nèi)存信息。本發(fā)明內(nèi)存泄露檢測(cè)方法可以提高檢測(cè)的速度,精確度。具有很強(qiáng)的可操作性,甚至可以作為移動(dòng)終端的一個(gè)常駐模塊,由測(cè)試人員來(lái)操作發(fā)現(xiàn)問(wèn)題。采用本發(fā)明的方法,可以很全面的檢測(cè)手機(jī)系統(tǒng)具體模塊的內(nèi)存泄漏,覆蓋更多的測(cè)試路徑,使內(nèi)存泄露檢查全面、快速。
文檔編號(hào)G06F11/36GK102262582SQ20101018398
公開日2011年11月30日 申請(qǐng)日期2010年5月25日 優(yōu)先權(quán)日2010年5月25日
發(fā)明者楊雄偉 申請(qǐng)人:芯訊通無(wú)線科技(上海)有限公司