Rss & SiteMap

曙海教育集团论坛 http://www.bjzhda.cn

曙海教育集团论坛
共1 条记录, 每页显示 10 条, 页签: [1]
[浏览完整版]

标题:如何使用新版HooKlogger查找内存泄露

1楼
wangxinxin 发表于:2010-12-3 13:54:40
我才学塞班1个多星期吧,对其理解还不是很透彻,不过现在已经会使用HOOKLOGGER来找内存泄露了,这个工具还是蛮准的,由于官方最新版的安装方法和老版本的稍微有些区别了,所以导致很多人都安装失败,我也是看了鬼人王大哥的帖子后才知道有这个软件的,不过鬼人王大哥的帖子的安装方法貌似已经过时了,反正我安了后模拟器再也启动不了了,导致GHOST了1次,还好备份了。
首先建议大家设置好环境后一定要GHOST备份呀,要是模拟器启动不了了那就麻烦了,费时费力啊。

这个方法适用于第3版SDK,貌似新的HOOK工具不能用于低于2版FP3之前的版本,不保证该帖子的时效性,具体还得看hooklogger官网(我是直接学的3版,对2版一点也不懂)。
首先去官网下载安装包(如果能从人王大哥那要来老版本的话,可以用他的方法来安装,不过新版本不用设置环境变量,不用重启如果没记错的话,就1条命令搞定):
1. 开始-运行 CMD,在控制台下边输入:SetupHooks  S60_3rd_MR:com.nokia.s60

如上图所示,因为我已经安装好了,所以提示我有个目标存在。
SetupHooks是命令,空格后是我3版的版本号吧,也就是在控制台下输入devices后可以看到的,也可能你们和我的不一样,我们老师推荐弄MR的。
输入完命令按完回车后,会有提示,提示很简单看看就能知道成功与否。

2.好了,安完后就可以使用它方便快捷的来找内存泄露了,先运行log,再运行模拟器哦,先说下我的环境:3版SDK,IDE安了VS2005和CARBIDE,不过主要用2005开发
打开hooklogger后标题会显示没有和模拟器连接,如下图:

接着我们启动模拟器吧(我估计是安装某个环节出了点问题,反正一启动就提示leave了(出现时会自动进入debug模式,选continue就行),不过无视它吧,狂点运行肯定可以启动模拟器)
启动成功后进入我们的目标工程,运行一遍直到内存泄露为止,接着模拟器界面出现提示说内存泄露在内存的某个位置,如下图:

接着我们切换到log的界面吧,找到Threads(最后1个)这个标签,把下拉条拉到最底部,我们能看到我们工程的这个线程,如下图:

这个是我的工程名,一时心急,名字敲错了,嘿嘿,这个一般也是在线程的最底部的位置,接着右键单击,选择如图:

接着log会自己跳转到Heap标签下,里面显示了内存地址,如图:

对比一下模拟器报错的地址很轻易就找到了位置,我们双击一下,自动进去一个窗口,里面显示了1堆代码,一般里面列出的第1个函数就是内存泄露的位置,如图(该点是从人王大哥那学到的):

接着我们双击进入这个函数,也会自动蹦出1个对话框窗体,里面高亮部分就是我们出现泄露的地方,如图:

接着我们就可以去代码里找了,注意不一定出现泄露的地方就是在该句代码附近,而只是表明,这个泄露跟这句代码是有关系的,果然我这new了1个空间,很可能是我没有释放导致泄露的,那就去释放的地方看看吧。

先解释一下我这个有意的泄露吧,我这定义了1个局部指针,但不是在这个类里析构把它放掉的,我定义了1个rpointerarray数组保存这些指针,而这些指针都是保存在我自定义的1个9宫格类里,所以自然我们要去我9宫格类的析构里看看到底问题出在哪,如图:

果然,我的数组只reset了没有把new在堆上的数据给释放,所以导致泄露了,只要把注掉的那句代码替换reset就OK了。
接着我们重新build一下工程吧,这个时候可能会报错,没事,转到log界面,这时它会碰出1个询问框,大概就是左边是个relloc按钮右边是个release按钮,我选择了左边的按钮,接着build一切OK。
END。
由于本人接触计算机时间有限,这也是在技术论坛上的第1个帖子,我是今年7月才第1次接触C语言的,现在塞班也才学1个多星期,肯定会有所纰漏,希望大家指正,在次再次感谢人王大哥的帖子,如果有人转载希望表名出自devdiv
共1 条记录, 每页显示 10 条, 页签: [1]

Copyright © 2000 - 2009 曙海教育集团
Powered By 曙海教育集团 Version 2.2
Processed in .01563 s, 2 queries.