HookLogger在UIQ上的使用方法 Saturday, October 10, 2009

HookLoggerSymbian提供的一个基于windows的强大工具。当模拟器运行的时候,它能记录应用程序堆栈使用情况、当前运行的线程等等。在这里我们最关心的是应用程序堆栈使用情况。
在这里我想强调的是
1〉hooklogger仅仅是记录了所有在heap上分配的cell的相关信息,包括这个cell的地址以及分配这个cell的函数调用栈等等。
2〉hooklogger并不能在编译或者执行阶段主动指出应用程序造成了哪些泄漏
3〉在模拟器上出现如下提示的时候,“user breakpoint called from code at 0x7001da68”,就该hooklogger显灵了。根据显示的地址可以track到泄漏的具体位置。
HookLogger下载地址:http://developer.symbian.com/main/tools/devtools/code/index.jsp
在symbian的网站有一个简单的使用帮助:http://developer.sonyericsson.com/site/global/techsupport/tipstrickscode/symbian/p_hooklogger_trace_memory_leaks_uiq3.jsp
这个帮助可以教会你如何使用HookLogger。
我在这里提供一个bat文件,方便调用HookEUSER命令。而且不影响sdk的编译和运行环境。
首先建议最好把HookLogger安装在c:\pf\CommonFiles这样的路径下,因为dos把空格之后的数据都ignore。 最后,为了避免你设置epoc32出现问题,我修改了HookEUser.pl这个脚本

@echo off
   REM 设置安装的SDK中epoc32的路径
   set EPOCROOT=c:\
   echo HookEUSER
REM 设置安装路径
set path="C:\program files\Common Files\Symbian\Tools";%path%
cmd
 第54行,加入 $path =~ s-\\-/-;
第75行,改为 my $cmd = "copy \"$hooks_src\"";
这样就方便多了。执行的步骤如下:
> hookeuser winscw
Target path is /epoc32/release/winscw/UDEB
        
1 file(s) copied.
Modified euser.dll to hook EUserParasite_eka2.dll, original 
is euser.orig.dll.
Run HookEUSER with 
-r to restore
> hooklogger
然后开始调试。在调试完成后,运行下面的命令恢复环境
> hookeuser -r winscw
Target path is /epoc32/release/winscw/UDEB
Restored euser.dll from euser.orig.dll; hooks no longer 
in place

如何在s60上使用hooklogger

0 comments: