【转】hooklogger的安装与使用

 

hooklogger的安装与使用:

1. 安装:

运行安装文件,一路next。安装完成以后要手动设置一下sdk的版本

在控制台中,选择到安装symbian SDK的盘符(没安装的一边去)

键入 devices

这时候会看到一个或者多个sdk版本的名字。

键入 setuphooks sdk版本名字

成功的话会看到类似于下面的提示:

D:/>setuphooks s60_5th_edition_sdk_v1.0:com.nokia.s60
Setting up hooks in "D:/symbian/S60_5th_Edition_SDK_v1.0/epoc32/release/WINSCW/U
DEB"
已复制 1 个文件。
Setup euser.dll to load EUserParasite_EKA2.dll, original preserved as euser.orig
.dll.
Run SetupHooks with --r to restore it

2. 运行:

hooklogger可以在debug版或者release版的模拟器上工作,但将会使你的模拟器变得更慢。

运行步骤:
1. 先打开hooklogger,在filter里面选择你要监控的程序(5th的模拟器对此支持不完善,建议不选)。如果不选的话就是默认监控所有程序(是所有在模拟器中运行着的程序)。

2. 打开模拟器运行程序,退出。

3. 如果你的程序有内存泄露,模拟器则会报警 alloc: ******** 。 *号代表的是内存泄露的地址。这个时候不要点确认,切换到hooklogger,点到heap,按 list all alloc。

4. 这个时候你会看到一连串的地址。在里面找到你内存泄露的那个地址,点进去,可以看到一连串的callstack。之后的事情就看个人领悟能力了。

值得一提的是:如果运行了c语言的函数,必须调用CloseStdLib来清除申请的内存。否则你用hooklogger找一辈子也找不出内存泄露的原因。

 

 

http://blog.sina.com.cn/s/blog_494c87090100hjep.html

今天调试一个程序时,始终在退出时要报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,得到如下窗口:
S60 <wbr>3rd下使用HookLogger查找内存泄漏错误
说明EUser.dll还没有被hook,接下来输入 SetupHooks.cmd S60_3rd_MR:com.nokia.s60,得到如下窗口:

S60 <wbr>3rd下使用HookLogger查找内存泄漏错误
说明EUser.dll已被正确替换,可以用来hook啦。

 

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

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

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找到了对于的地址及源码:
S60 <wbr>3rd下使用HookLogger查找内存泄漏错误
双击"ConstructL"定位到源代码:
S60 <wbr>3rd下使用HookLogger查找内存泄漏错误
哈哈,原来是gridM搞的鬼,注释掉,一切OK!

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

 

注意:

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值