S60 3rd下使用HookLogger查找内存泄漏错误

    今天调试一个 程序时,始终在退出时要报alloc错误,很明显,是某个地方产生了内存泄露,但一行行的看代码分析实在不是一个良策,google了一些发现有个叫 HookLogger的工具,专门用于查找内存漏洞,而且口碑极好,down下来一试,果然药到病除,不敢私藏,与大家共勉。
1、下载HookLogger.zip,地址:http://developer.symbian.org/wiki/index.php/File:HookLogger.zip
2、安装:(我使用的是S60 3rd MR版)
解压HookLogger_Setup.zip后运行安装程序,可按默认安装,我安装在D:/Symbian/HookLogger,避免路径中产生空格。
1)在系统的环境变量设置里,添加环境变量EPOCROOT,其值为/Symbian/9.1/S60_3rd_MR/
2)在S60 3rd下使用HookLogger,有些文章中说如果sdk和HookLogger的安装路径中带有空格,稍微有些问题,修改如下:
用记事本打开文件C:/Program Files/Common Files/Symbian/tools/HookEUSER.pl
(但我的系统中没有这个文件,可能跟其他人的版本不一样)
替换
    my $cmd = "copy $hooks_src";

    my $cmd = "copy /"$hooks_src/"";
以及替换
    $cmd = "$Bin/AttachDll $euser $hooks $hooked_euser";

    $cmd = "/"$Bin/AttachDll/" $euser $hooks $hooked_euser";
保存后退出。
3)打开cmd窗口,进入到HookLogger的安装目录,输入SetupHooks.cmd,得到如下窗口:

说明EUser.dll还没有被hook,接下来输入 SetupHooks.cmd S60_3rd_MR:com.nokia.s60,得到如下窗口:


说明EUser.dll已被正确替换,可以用来hook啦。

 

3、使用:
1)先从开始菜单启动HookLogger,选择"Filters"页,摁下"Browse for EXE"按钮,找到你想分析的发生泄漏的可执行文件。在下拉框中选择"Include only checked"。如图:


2)然后启动Emulator。HookLogger will be connected to the emulator and you will get the confirmation on the Title bar. 在运行自己的程序之前,go to the Heap tab and press "Mark".此时,运行你的程序,再现MemLeak直到异常退出。然后转到 HookLogger的Heap页,Now press "Check" in the HookLogger Heap tab. You will get listing of memory allocations for your application.

Search for the memory leaking pointer( in my case it is 301acec0 ) from the list. Double click on the pointer or press "Alloc Details". You will get the stack. From the stack you can find source file locations for the memory allocations. If you click on a particular memory allocation it will point to the source line of allocation.

如果点击分配的内存,可以打开查看源代码,快速的定位内存错误的原因。
如下,我的程序崩了,通过HookLogger找到了对于的地址及源码:

双击"ConstructL"定位到源代码:

哈哈,原来是gridM搞的鬼,注释掉,一切OK!

4、卸载:
执行:SetupHooks.cmd S60_3rd_MR:com.nokia.s60 --r 即可。

 

注意:

有部分人会遇到在启动Emulator的时候,发生“Ordinal 1905 missing from dll”的问题,直接点击提示框的叉叉,不是中间的OK键,再按(Debug)F8,之后可正常使用HookLogger。

HookLogger的确是一个非常好的工具,发生内存泄漏但无法解决时,强烈推荐大家使用!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值