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 winscw3、使用: 先启动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