CN102262582A - 移动终端及其内存泄露检测方法 - Google Patents
移动终端及其内存泄露检测方法 Download PDFInfo
- Publication number
- CN102262582A CN102262582A CN2010101839858A CN201010183985A CN102262582A CN 102262582 A CN102262582 A CN 102262582A CN 2010101839858 A CN2010101839858 A CN 2010101839858A CN 201010183985 A CN201010183985 A CN 201010183985A CN 102262582 A CN102262582 A CN 102262582A
- Authority
- CN
- China
- Prior art keywords
- module
- memory
- portable terminal
- internal memory
- data
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种移动终端及其内存泄露检测方法,其包括:一命令解析模块,用于接收并且分析pc发送过来的数据然后执行对应的操作,对各模块进行测试;一内存记录模块,用于记录分配内存的地址、函数名和行数,及释放内存的时候删除该记录;一数据分析模块,用于打印并分析未被释放的内存信息。本发明内存泄露检测方法可以提高检测的速度,精确度。具有很强的可操作性,甚至可以作为移动终端的一个常驻模块,由测试人员来操作发现问题。采用本发明的方法,可以很全面的检测手机系统具体模块的内存泄漏,覆盖更多的测试路径,使内存泄露检查全面、快速。
Description
技术领域
本发明涉及一种移动终端内存泄露检测方法,特别适用于手机等移动通信终端,及带界面操作的嵌入式设备。
背景技术
现在的移动终端(如手机系统)已经非常庞大,用记录所有内存分配和释放记录来确定内存泄露将是非常艰难的,许多内存的分配本来就是一次性的,直到关机都不会被释放,通过记录所有内存的信息来定位内存泄露就显得效率低下,代价比较大,特别是有些内存泄露甚至是手机内部的交互事件引起的,传统的方法根本无法觉察到!
发明内容
本发明要解决的技术问题是为了克服现有技术中移动终端内存泄露检测效率低下等缺陷,提供一种高效率和快速的移动终端及其内存泄露检测方法。
本发明是通过下述技术方案来解决上述技术问题的:
一种移动终端,其特点在于,其包括:
一命令解析模块,用于接收并且分析pc发送过来的数据然后执行对应的操作,对各模块进行测试;
一内存记录模块,用于记录分配内存的地址、函数名和行数,及释放内存的时候删除该记录;
一数据分析模块,用于打印并分析未被释放的内存信息。
较佳地,打印信息中只出现一次的是属于被测试模块一次性分配的数据,不属于泄漏;打印信息中重复多次出现的数据,则为内存泄漏。
较佳地,该移动终端为移动通信终端或带界面操作的嵌入式设备。
本发明的另一技术方案为:一种所述移动终端的内存泄露检测方法,其特点在于,其包括如下步骤:
S1、使移动终端的被测试模块处于初始入口状态,在PC端发送启动内存检测命令,移动终端启动内存记录模块;
S2、手动操作进入移动终端的被检测模块,对该被检测模块进行各项功能操作,然后回到初始入口状态;
S3、重复步骤S2,此时的操作包含步骤S2中的操作,同时也可以进行更多的操作,再次返回初始入口状态;
S4、在PC端发送停止内存检测命令,同时接收移动终端发送来的内存分配信息数据。
较佳地,打印信息中只出现一次的是属于被测试模块一次性分配的数据,不属于泄漏;打印信息中重复多次出现的数据,则为内存泄漏。
较佳地,步骤S2中的对被测试模块的各项功能操作包括反复开启关闭该模块,使用该模块的某些功能以及并发运行其他模块。
较佳地,在步骤S1-S3中初始入口状态保持一致,即移动终端的显示界面、开启的应用、硬件外设和工作状态均保持一致。
本发明的积极进步效果在于:本发明内存泄露检测方法可以提高检测的速度,精确度。具有很强的可操作性,甚至可以作为移动终端的一个常驻模块,由测试人员来操作发现问题。采用本发明的方法,可以很全面的检测手机系统具体模块的内存泄漏,覆盖更多的测试路径,使内存泄露检查全面、快速。
附图说明
图1为本发明的移动终端的模块图。
图2为本发明的内存泄露检测方法的流程图。
图3为本发明的手机与pc机数据交互流程图。
图4为本发明的内存分配信息数据分析图。
具体实施方式
下面结合附图给出本发明较佳实施例,以详细说明本发明的技术方案。
如图1-4所示,本发明的移动终端,包括:一命令解析模块1,用于接收并且分析pc发送过来的数据然后执行对应的操作,对各模块进行测试,一般的嵌入式设备都具备与pc交互数据的功能,本发明在其基础上扩展一个pc对手机的命令项即可;一内存记录模块2,用于记录分配内存的地址、函数名和行数,及释放内存的时候删除该记录;一数据分析模块3,用于打印并分析未被释放的内存信息。其中,该移动终端可以为移动通信终端或带界面操作的嵌入式设备。其中停止内存记录模块的时候,打印未被释放的内存信息。
而本发明的移动终端的内存泄露检测方法,至少要包括如下步骤:
S1、使移动终端的被测试模块处于初始入口状态,在PC端发送启动内存检测命令,移动终端启动内存记录模块;
S2、手动操作进入移动终端的被检测模块,对该被检测模块进行各项功能操作,然后回到初始入口状态;
S3、重复步骤S2,此时的操作包含步骤S2中的操作,同时也可以进行更多的操作,再次返回初始入口状态;
S4、在PC端发送停止内存检测命令,同时接收移动终端发送来的内存分配信息数据。
本发明的总体思想为:首先确定手机初始状态,然后对手机进行一系列可以重复进行的操作,然后再退回到手机的初始状态,通过分析内存分配的增量信息即可以准确定位手机内存泄露!
本实施例中,移动终端选用手机,被测试模块以蓝牙模块为例加以说明。
如图2,步骤101,先使手机处于蓝牙入口界面(初始状态A),通过数据线连接pc机与手机,pc端发送启动内存记录的命令,手机端接收到命令启动内存记录,此时开始记录内存的分配状态;步骤102,这时候可以进入蓝牙模块菜单进行操作,例如反复开启关闭蓝牙功能,搜索连接其他蓝牙设备,设置蓝牙可见状态,通过蓝牙收发文件等,可以把要测试的模块的各种功能都运行一遍,交互事件也可以进行,例如蓝牙操作过程中拨打接听电话,播放音乐等,图中这一系列操作称为B。步骤103,然后返回到初始状态A。之后步骤104,再进入蓝牙模块进行各种操作,称作为D,此时的操作应包含上一次的操作,也可以进行更多的操作,即数量上,D>=B。最后步骤105,再返回蓝牙入口界面(状态A)。步骤106,再次通过pc端发送停止内存检测的命令,同时接收手机端发送过来的内存分配信息数据。上述步骤101~106在实际中的具体实现是本领域的现有技术,并非本发明的发明点所在。
其中,手机初始状态与操作完成后返回的状态一致包含以下几个方面:
1、手机显示界面处于一致;2、手机实际开启应用一致(例如,操作过程中开启了蓝牙模块,回到原界面状态的时候蓝牙模块也处于开启状态);3、手机包含的硬件外设一致(例如开始的时候连接了蓝牙耳机,最后的状态也必须是连接蓝牙耳机);4、工作状态也应保持一致(例如开始的时候有mp3背景播放,结束状态也应有mp3背景播放)。
信息分析过程如图4所示,步骤201,取内存分配记录;步骤202,打印信息中只出现一次的是属于被测试模块一次性分配的数据,不属于泄漏;步骤203,如果重复多次出现的数据,则可以定性为内存泄漏,进行重点分析。
其中,以一种编程语言为例,内存记录模块的源代码如下:
//初始化内存记录模块的数组
void mem_dbg init(void);
//分配内存的时候记录分配内存信息的函数名和行数
void mem_dbg_addr_record(void*pAddr,unsigned int bytes,char*fn,unsigned int ln);
//内存被释放的时候清除记录的信息
void mem_dbg_addr_clesr(void*pAddr);
//结束检测的是时候将信息dump到pc端
void mem_dbg_dump(void);
//用于pc端发送命令给手机侧的时候开始和结束监控
void mem_dbg_monitor(U32 bFlag);
//----------------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//可根据需要调整大小
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
*--------------------
************************************************/
void mem_dbg_init(void)
{
U32 uIndex=0;
for(uIndex=0;uIndex<MAX_DBG_CTRL-1;uIndex++)
{
g_mem_dbg_ctrl[uIndex].pNext=&g_mem_dbg_ctrl[uIndex+1];
}
g_mem_dbg_ctrl[MAX_DBG_CTRL_1]·pNext=NULL;
p_mem_dbg_free=&g_mem_dbg_ctrl[0];
p_mem_dbg_active=NULL;
}
/************************************************
*mem_dbg_addr_record-record the addr when malloc buffer
*DESCRIPTION:-
*
*Input:
*Output:
*Returns:
*
*modification history
*--------------------
************************************************/
void mem_dbg_addr_record(void*pAddr,unsigned int bytes,char*fn,unsigned int ln)
{
T_MEM_DBG_CTRL*pTemp;
if(!g_mem_dbg_init_flag)
{
return;
}
pTemp=p_mem_dbg_free;
if(pTemp==NULL)
{
return;
}
pTemp->uMemAddr=(unsigned int)pAddr;
sprintf(pTemp->Record,″(%.*s,%d)sz:%d″,28,fn,ln,bytes);
//---to pointer next free space,and add new pointer toactivelist------
p_mem_dbg_free=p_mem_dbg_free->pNext;
pTemp->pNext=p_mem_dbg_active;
p_mem_dbg_active=pTemp;
}
/************************************************
*mem_dbg_addr_clear-to clear addr when free buf accord tothe addr
*DESCRIPTION:-
*
*Input:free memory addr
*Output:
*Returns:
*
*modification history
*--------------------
************************************************/
void mem_dbg_addr_clear(void*pAddr)
{
T_MEM_DBG_CTRL*pActiveTemp=NULL;
T_MEM_DBG_CTRL*pPriorTemp=NULL;
U32 count=0;
if(!g_mem_dbg_init_flag)
{
return;
}
pActiveTemp=p_mem_dbg_active;
while(pActiveTemp)
{
if(pActiveTemp->uMemAddr==(unsigned int)pAddr)
{//find the free pointer
//-----del from active list-------
if(NULL==pPriorTemp)
{//the frist pointer
p_mem_dbg_active=em_dbg_active->pNext;
}
else
{
pPriorTemp->pNext=pActiveTemp->pNext;
}
//----add to free pointer list----
pActiveTemp->uMemAddr=0;
pActiveTemp->pNext=p_mem_dbg_free;
p_mem_dbg_free=pActiveTemp;
break;
}
else
{
pPriorTemp=pActiveTemp;
pActiveTemp=pActiveTemp->pNext;
}
if(count++>MAX_DBG_CTRL)
{
break;
}
}
if(count>MAX_DBG_CTRL)
{
printf(″tp_os_mem_dbg_free:error″);
}
}
/********************************************************
*mem_dbg_dump -printf memory malloc info to pc
*DESCRIPTION:-
*
*Input:
*Output:
*Returns:
*
*modification history
*--------------------
********************************************************/
void mem_dbg_dump(void)
{
T_MEM_DBG_CTRL*pTemp=p_mem_dbg_active;
while(pTemp)
{
printf(″leak info:%s″,pTemp->Record);
pTemp=pTemp->pNext;
}
}
/************************************************
*mem_dbg_monitor-to start or stop monitor
*DESCRIPTION:-
*to start at entry of an applicaton,stop at exit of an
*application
*Input:
*Output:
*Returns:
*
*modification history
*--------------------
************************************************/
void mem_dbg_monitor(U32 bFlag)
{
g_mem_dbg_init_flag=bFlag;
if(g_mem_dbg_init_flag)
{
mem_dbg_init();
}
else
{
mem_dbg dump();
}
}
//----------------memory debug end----------------
虽然以上描述了本发明的具体实施方式,但是本领域的技术人员应当理解,这些仅是举例说明,本发明的保护范围是由所附权利要求书限定的。本领域的技术人员在不背离本发明的原理和实质的前提下,可以对这些实施方式做出多种变更或修改,但这些变更和修改均落入本发明的保护范围。
Claims (7)
1.一种移动终端,其特征在于,其包括:
一命令解析模块,用于接收并且分析pc发送过来的数据然后执行对应的操作,对各模块进行测试;
一内存记录模块,用于记录分配内存的地址、函数名和行数,及释放内存的时候删除该记录;
一数据分析模块,用于打印并分析未被释放的内存信息。
2.如权利要求1所述的移动终端,其特征在于,打印信息中只出现一次的是属于被测试模块一次性分配的数据,不属于泄漏;打印信息中重复多次出现的数据,则为内存泄漏。
3.如权利要求1所述的移动终端,其特征在于,该移动终端为移动通信终端或带界面操作的嵌入式设备。
4.一种如权利要求1所述移动终端的内存泄露检测方法,其特征在于,其包括如下步骤:
S1、使移动终端的被测试模块处于初始入口状态,在PC端发送启动内存检测命令,移动终端启动内存记录模块;S1
S2、手动操作进入移动终端的被检测模块,对该被检测模块进行各项功能操作,然后回到初始入口状态;
S3、重复步骤S2,此时的操作包含步骤S2中的操作,同时也可以进行更多的操作,再次返回初始入口状态;
S4、在PC端发送停止内存检测命令,同时接收移动终端发送来的内存分配信息数据。
5.如权利要求4所述的内存泄露检测方法,其特征在于,打印信息中只出现一次的是属于被测试模块一次性分配的数据,不属于泄漏;打印信息中重复多次出现的数据,则为内存泄漏。
6.如权利要求4所述的内存泄露检测方法,其特征在于,步骤S2中的对被测试模块的各项功能操作包括反复开启关闭该模块,使用该模块的某些功能以及并发运行其他模块。
7.如权利要求4所述的内存泄露检测方法,其特征在于,在步骤S1-S3中初始入口状态保持一致,即移动终端的显示界面、开启的应用、硬件外设和工作状态均保持一致。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2010101839858A CN102262582A (zh) | 2010-05-25 | 2010-05-25 | 移动终端及其内存泄露检测方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2010101839858A CN102262582A (zh) | 2010-05-25 | 2010-05-25 | 移动终端及其内存泄露检测方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN102262582A true CN102262582A (zh) | 2011-11-30 |
Family
ID=45009219
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2010101839858A Pending CN102262582A (zh) | 2010-05-25 | 2010-05-25 | 移动终端及其内存泄露检测方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102262582A (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102685590A (zh) * | 2012-05-14 | 2012-09-19 | 深圳市九洲电器有限公司 | 机顶盒内存管理方法及装置 |
CN102866947A (zh) * | 2012-08-29 | 2013-01-09 | 深圳市共进电子股份有限公司 | 一种Linux内核内存泄漏的检测方法 |
CN103744783A (zh) * | 2014-01-03 | 2014-04-23 | 华为技术有限公司 | 重复数据删除性能测试方法和装置 |
CN105912398A (zh) * | 2016-04-06 | 2016-08-31 | 北京小米移动软件有限公司 | 内存检测方法及装置 |
CN106502880A (zh) * | 2016-09-20 | 2017-03-15 | 东软集团股份有限公司 | 一种内存泄漏调试方法及装置 |
CN112527663A (zh) * | 2020-12-17 | 2021-03-19 | 杭州国芯科技股份有限公司 | 一种嵌入式系统中软件所用内存的检测方法 |
CN113434364A (zh) * | 2021-06-25 | 2021-09-24 | 青岛海尔科技有限公司 | 屏端设备内存检测方法、装置、存储介质及电子装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3407809B2 (ja) * | 1990-06-07 | 2003-05-19 | サン・マイクロシステムズ・インコーポレイテッド | コンピュータ・アプリケーション・ソフトウェアの自動化試験システム |
CN1466057A (zh) * | 2002-06-20 | 2004-01-07 | 华为技术有限公司 | 一种软件内存泄露的检查方法 |
CN101262681A (zh) * | 2008-04-16 | 2008-09-10 | 青岛海信移动通信技术股份有限公司 | 自动测试的移动终端及实现方法 |
CN101539870A (zh) * | 2008-03-21 | 2009-09-23 | 中兴通讯股份有限公司 | 内存泄漏检测装置及方法 |
-
2010
- 2010-05-25 CN CN2010101839858A patent/CN102262582A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3407809B2 (ja) * | 1990-06-07 | 2003-05-19 | サン・マイクロシステムズ・インコーポレイテッド | コンピュータ・アプリケーション・ソフトウェアの自動化試験システム |
CN1466057A (zh) * | 2002-06-20 | 2004-01-07 | 华为技术有限公司 | 一种软件内存泄露的检查方法 |
CN101539870A (zh) * | 2008-03-21 | 2009-09-23 | 中兴通讯股份有限公司 | 内存泄漏检测装置及方法 |
CN101262681A (zh) * | 2008-04-16 | 2008-09-10 | 青岛海信移动通信技术股份有限公司 | 自动测试的移动终端及实现方法 |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102685590A (zh) * | 2012-05-14 | 2012-09-19 | 深圳市九洲电器有限公司 | 机顶盒内存管理方法及装置 |
CN102685590B (zh) * | 2012-05-14 | 2014-12-10 | 深圳市九洲电器有限公司 | 机顶盒内存管理方法及装置 |
CN102866947A (zh) * | 2012-08-29 | 2013-01-09 | 深圳市共进电子股份有限公司 | 一种Linux内核内存泄漏的检测方法 |
CN103744783A (zh) * | 2014-01-03 | 2014-04-23 | 华为技术有限公司 | 重复数据删除性能测试方法和装置 |
CN103744783B (zh) * | 2014-01-03 | 2016-08-31 | 华为技术有限公司 | 重复数据删除性能测试方法和装置 |
CN105912398A (zh) * | 2016-04-06 | 2016-08-31 | 北京小米移动软件有限公司 | 内存检测方法及装置 |
CN106502880A (zh) * | 2016-09-20 | 2017-03-15 | 东软集团股份有限公司 | 一种内存泄漏调试方法及装置 |
CN112527663A (zh) * | 2020-12-17 | 2021-03-19 | 杭州国芯科技股份有限公司 | 一种嵌入式系统中软件所用内存的检测方法 |
CN113434364A (zh) * | 2021-06-25 | 2021-09-24 | 青岛海尔科技有限公司 | 屏端设备内存检测方法、装置、存储介质及电子装置 |
CN113434364B (zh) * | 2021-06-25 | 2024-03-22 | 青岛海尔科技有限公司 | 屏端设备内存检测方法、装置、存储介质及电子装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102262582A (zh) | 移动终端及其内存泄露检测方法 | |
US12085612B2 (en) | On-chip debugging device and method | |
CN107066390B (zh) | 一种动态内存泄漏检测方法及系统 | |
CN103246586B (zh) | android平台上利用USB存储设备进行ADB调试的方法 | |
CN101060372A (zh) | 一种快速生成自动化测试脚本的方法及系统 | |
CN103838663A (zh) | 一种应用程序的测试方法及装置 | |
CN104407980A (zh) | 移动应用自动化测试装置和方法 | |
CN113407393B (zh) | 芯片验证方法、终端设备、验证平台以及存储介质 | |
CN101539870A (zh) | 内存泄漏检测装置及方法 | |
CN101738550A (zh) | 电子装置测试装置及测试方法 | |
CN107133144B (zh) | 一种动态监测堆内存使用错误的内存监测装置及方法 | |
CN105068909B (zh) | 一种内嵌式存储器的模拟测试开发平台 | |
KR100985749B1 (ko) | 내장형 시스템 소프트웨어 자동 테스트 시스템 및 방법과테스트 시나리오 작성 방법 | |
US8402446B2 (en) | Associating probes with test cases | |
JP2004227588A (ja) | Sdioカード開発システム | |
CN102681938A (zh) | 一种内存泄漏检测方法及装置 | |
KR20090002208A (ko) | 디지털 포렌식 시스템 및 그 방법 | |
CN109086176A (zh) | 一种基于fio的ssd稳态测试方法、装置、设备及存储介质 | |
CN106649098A (zh) | 在终端设备上实现发布版本软件调试的方法和装置 | |
CN110597704B (zh) | 应用程序的压力测试方法、装置、服务器和介质 | |
CN109885438A (zh) | 一种fpga可靠性测试方法、系统、终端及存储介质 | |
CN112349336B (zh) | 一种存储器测试装置 | |
CN104516817A (zh) | 一种内存泄漏检测方法及装置 | |
CN102855338B (zh) | 现场可编程门阵列原型验证装置及验证方法 | |
CN117076337A (zh) | 一种数据传输方法、装置、电子设备及可读存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20111130 |