HookLogger检查内存泄漏

http://www.360doc.com/content/10/0507/11/1363677_26463522.shtml


 

1、下载HookLogger
HookLogger在Symbian.org上可以找到,具体地址如下:
http://developer.symbian.org/wiki/index.php/File:HookLogger.zip
 
2、安装
安装路径中不要有中文和空格,具体原因不清楚。
 
3、设置
用cmd进入安装路径,首先输入devices,得到sdk的版本。比如S60_3rd_MR:com.nokia.s60
然后运行SetupHooks再加上版本号,如SetupHooks S60_3rd_MR:com.nokia.s60
 
4、运行
先启动HookLogger,切换到Threads选项卡。再启动模拟器,可以看到Threads下面的输出区域有反应,说明成功了。
运行你要调试的程序,然后退出,程序弹出“程序已关闭的错误对话框”。然后在HookLogger里切换到Heap选项卡。
点击下面第三个按钮,什么all alloc,第一个单词没显示出来。在上面找到出错的地址,也就是提示的ALLOC:XXXXX,双击弹出对话框。
你可以看到出错的代码所在的文件和行数,然后检查你的代码,改正你的错误。

 

5、卸载见下面文章,或使用euser.orig.dll替换

///

 

 

HookLogger的使用
2008年11月20日 星期四 16:07

安装的时候路径最好不要带空格
我的安装位置是C:/Symbian/Tools

修改C:/Symbian/Tools/HookEUSER.pl
即修改为自己的epoc32路径(53行)
my $path = "Z:/epoc32/release/$platform/$release";


或者在环境变量中添加EPOCROOT
然后在dos下设置setuphooks epocroot


启动:
打开一个控制台(DOS窗口),改变当前目录为:
C:/Symbian/tools
然后运行
HookEUSER winscw

Symbian上的一个教程

http://developer.symbian.com/main/tools_and_sdks/developer_tools/supported/hook_logger/intro.htt

 

参考:

1、下载:
http://developer.symbian.com/main/downloads/files/HookLogger_Setup.zip

2、安装:(假定使用的是S60 3rd MR版)
解压HookLogger_Setup.zip后运行安装程序,按默认安装。

在S60 3rd下使用HookLogger,稍微有些问题,修改如下:
1) 在系统的环境变量设置里,添加环境变量EPOCROOT,其值为/Symbian/9.1/S60_3rd_MR/
2) (可用记事本)打开文件
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)打开一个控制台(DOS窗口),改变当前目录为:
C:/Program Files/Common Files/Symbian/tools
然后运行
hookeuser winscw

3、使用:
先启动HookLogger,然后启动Emulator。运行你的程序,再现MemLeak直到异常退出。这时,转到HookLogger的Heap页,点击下面的按钮“List All Allocs”将列出发生内存泄漏的地址。然后双击某条信息即可查看明细情况,甚至可以打开源代码文件,非常方便!

详情可参考[注2]。

4、卸载:
参考2.3,运行
hookeuser -r winscw

评:HookLogger是一个好工具,在对内存泄漏毫无头绪时,可帮你迅速找到问题之所在。

 

HookLogger如何工作?

这个工具通过替换EUSER.DLL文件为自己的版本来使能记录内存分配情况、进程和线程的创建、Leaves等等。HookLogger应用程序收集这些日志信息,然后以一种易读的格式呈现给用户。

安装

HookLogger有一个便利的安装程序,可以在这里下载

注意:

  • HookLogger的安装路径必须不含有任何空格。如果有空格(比如: 安装到了缺省的位置下: Program Files/Common Files/Symbian/tools),你就必须编辑HookEUSER.pl文件末尾的两行。替换
行号: 74  my $cmd = "copy $hooks_src";

my $cmd = "copy /"$hooks_src/"";

以及

行号 : 77  $cmd = "$Bin/AttachDll $euser $hooks $hooked_euser";

$cmd = "/"$Bin/AttachDll/" $euser $hooks $hooked_euser";
  • S60平台的安装路径必须不含任何空格。可能这不是一个严重的问题,因为不管怎样,Symbian toolchain的几乎所有工具都有这个限制。当然,你也可以手工替换EUSER.DLL文件。

如果HookLogger调用栈显示不正确,你可能需要把下面这行加到项目的.mmp文件中:

OPTION CW -frame on
.

用法

1. 使用HookLogger附带的一个脚本文件。在HookLogger的安装文件夹打开命令行,然后输入:

HookEUSER winscw

随后,可能得到这些错误信息:

C:/Program Files/Common Files/Symbian/tools>HookEUSER winscw
 Target path is C:/Symbian/9.1/S60_3rd_MR/epoc32/release/winscw/UDEB
       1 file(s) copied.
 'C:/Program' is not recognized as an internal or external command,
 operable program or batch file.
 Failed running "C:/Program Files/Common Files/Symbian/tools/AttachDll  euser.dll
 EUserParasite_eka2.dll euser.dll.HOOKED" at HookEUSER.pl line 78.

在第78行,你可以设置你当前所使用的SDK的路径

my $path = "C:/Symbian/9.1/S60_3rd_MR/Epoc32/release/$platform/$release";

或者设置epocroot路径注意,这个perl脚本需要设置EPOCROOT环境变量。比如:

set EPOCROOT=S:/Symbian/9.2/S60_3rd_FP1/

2. 从开始菜单启动HookLogger。

3. 选择"Filters"页,摁下"Browse for EXE"按钮,找到你想分析的发生泄漏的可执行文件。在下拉框中选择"Include only checked"。

4. 启动emulator.

5. 在emulator中启动你的应用程序,再现内存泄漏,然后关闭。

6. 检查HookLogger的"Heap"页,然后摁"List all allocs"按钮。

你将看到泄漏数据列表。用"Alloc details"得到所需的信息: 泄漏内存分配时的调用堆栈!

注意!记着在使用HookLogger之后恢复原来的EUSER.DLL文件,因为改过的那个版本很慢、使用更多的资源。恢复命令:

HookEUSER -r winscw

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值