以文本方式查看主题 - 曙海教育集团论坛 (http://sun4.cn/bbs/index.asp) -- Symbian开发 (http://sun4.cn/bbs/list.asp?boardid=46) ---- 如何使用新版HooKlogger查找内存泄露 (http://sun4.cn/bbs/dispbbs.asp?boardid=46&id=2046) |
-- 作者:wangxinxin -- 发布时间:2010-12-3 13:54:40 -- 如何使用新版HooKlogger查找内存泄露 我才学塞班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 |