Detecting memory leaks with HookLogger

Detecting memory leaks with HookLogger

From Forum Nokia Wiki

It is one of the most time consuming task for developers to find memory leaks in their code. If your application happens to panic on exit with some memory leak, then sometimes it is a hard work to find the wrong piece of code with code analysis. HookLogger is a great emulator tool by Symbian that helps finding the leak fast.

Contents

[hide]

How does HookLogger work?

This tool replaces EUSER.DLL with its own to enable logging of memory allocations, process and thread creation, leaves, etc. HookLogger application collects these logs and presents them to the user in an easily readable form.

Installation

HookLogger can be downloaded here. It has a convenient installer.

Notes:

  • HookLogger's installation path must not contain any spaces. If it does (e.g. installing to the default location under Program Files/Common Files/Symbian/tools), you will have to edit two lines at the end of HookEUSER.pl. Replace
    Line Number: 74  my $cmd = "copy $hooks_src";
    with
    my $cmd = "copy /"$hooks_src/"";
    and
    Line Number : 77  $cmd = "$Bin/AttachDll $euser $hooks $hooked_euser";
    with
    $cmd = "/"$Bin/AttachDll/" $euser $hooks $hooked_euser";
  • S60 platform's installation path must not contain any spaces. This is not a severe issue as almost all tools in the Symbian toolchain have this limitation in any case.

Of course, you can also replace EUSER.DLL manually.

You might need to add following line to project .mmp files if HookLogger call stack display is not correct:
OPTION CW -frame on
.

Installation - tamhan's way

I have stumbled across a later version of HookLogger which no longer supports the command above. My command sequence for activating the critter is as follows:

Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.
 
C:/Dokumente und Einstellungen/TAMHAN>cd ..
 
C:/Dokumente und Einstellungen>cd ..
 
C:/>cd Programme
 
C:/Programme>cd HookLogger
 
C:/Programme/HookLogger>HookEUSer winscw
The "HookUser" utility has been replaced by "SetupHooks",
which supports "devices" directly. Here's the syntax
:
** usage:
SetupHooks ((DEVICE)) [--remove|r] [--platform=((PLATFORM))] [--build=((BUILD))]
** where:
((DEVICE)) specifies the device name to attach hooks to (as listed by 'devices'),
or DEFAULT for the default device, or EPOCROOT to attach to %EPOCROOT%/epoc32
(as used by legacy Symbian tools)
((PLATFORM)) defaults to WINSCW
((BUILD)) defaults to UDEB
--remove detaches the hooks, restoring the original EUSER.DLL
 
C:/Programme/HookLogger>SetupHooks
** usage:
SetupHooks ((DEVICE)) [--remove|r] [--platform=((PLATFORM))] [--build=((BUILD))]
** where:
((DEVICE)) specifies the device name to attach hooks to (as listed by 'devices'),
or DEFAULT for the default device, or EPOCROOT to attach to %EPOCROOT%/epoc32
(as used by legacy Symbian tools)
((PLATFORM)) defaults to WINSCW
((BUILD)) defaults to UDEB
--remove detaches the hooks, restoring the original EUSER.DLL
 
C:/Programme/HookLogger>devices
S60_5th_Edition_SDK_v0.9:com.nokia.s60 - default
 
C:/Programme/HookLogger>SetupHooks S60_5th_Edition_SDK_v0.9:com.nokia.s60
Setting up hooks in "C:/S60/devices/S60_5th_Edition_SDK_v0.9/epoc32/release/WINS
CW/UDEB"
1 Datei(en) kopiert.
Setup euser.dll to load EUserParasite_EKA2.dll, original preserved as euser.orig
.dll.
Run SetupHooks with --r to restore it
 
C:/Programme/HookLogger>

I had to use (( and )) to replace the ampersands. Cutting a lo9ng story short, the process involves first running devices to obtain a list of targets, then assign it to a specific target.

Usage

1. There is a script provided with HookLogger to do that. Open a command line in HookLoggers's installation folder and type:

HookEUSER winscw

After this one might get this kind of error

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. at line 78 one can set the path of the sdk that he might be working on

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

or you can set the epocroot path Note, this perl script requires EPOCROOT environment variable to be set. E.g.:

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

2. Start HookLogger from Start menu.

3. Select 'Filters' tab and press 'Browse for EXE' button and find your leaking executable you want to analyze. In the combo box select 'Include only checked'.

4. Start the emulator.

5. Start your application in the emulator, reproduce the memory leak, then close it.

6. Check HookLogger's 'Heap' tab then press 'List all allocs' button.


You will see the list of leaked data. With 'Alloc details' you get all the information you need: The call stack, when the leaked memory was allocated!

 

Note
Remember to restore old EUSER.DLL after using HookLogger, since the modified one is slow and uses lot's of resources!

HookEUSER -r winscw

 

making sense of el dump

Most important: if you use this to change down a ALLOC panic, you must mark the offending memory section before hitting the details button. The program will then get a dump like this one:

Ordinal350 + 36 - euser.dll! 60037034()
Expo + 11900 - EUserParasite_EKA2.dll! 1000dd6c()
Expo + 12679 - EUserParasite_EKA2.dll! 1000e077()
Ordinal364 + 32 - euser.dll! 60036ff0()
Expo + 11900 - EUserParasite_EKA2.dll! 1000dd6c()
Expo + 13873 - EUserParasite_EKA2.dll! 1000e521()
Ordinal365 + 18 - euser.dll! 6000f482()
Expo + 11900 - EUserParasite_EKA2.dll! 1000dd6c()
Expo + 14073 - EUserParasite_EKA2.dll! 1000e5e9()
>>>>Ordinal122 + 571 - efsrv.dll! 6600208b()
Ordinal122 + 52 - efsrv.dll! 66001e84()
Ordinal176 + 353 - efsrv.dll! 66004bb1()
Ordinal176 + 211 - efsrv.dll! 66004b23()
Ordinal176 + 277 - efsrv.dll! 66004b65()
Ordinal76 + 164 - efsrv.dll! 66005034()
CLocaNoteListView::ConstructL(class TRect const &,class CCoeControl const *,class MEikCommandObserver *) <C:/LocaNote/src/LocaNoteListView.cpp #176> + 35 - LocaNote.exe! 10882195()
CLocaNoteListView::NewLC(class TRect const &,class CCoeControl const *,class MEikCommandObserver *) <C:/LocaNote/src/LocaNoteListView.cpp #122> + 16 - LocaNote.exe! 10882037()
CLocaNoteListView::NewL(class TRect const &,class CCoeControl const *,class MEikCommandObserver *) <C:/LocaNote/src/LocaNoteListView.cpp #98> + 14 - LocaNote.exe! 10881fdc()
CLocaNoteListViewView::CreateContainerL(void) <C:/LocaNote/src/LocaNoteListViewView.cpp #277> + 37 - LocaNote.exe! 10881820()
CLocaNoteListViewView::DoActivateL(class TVwsViewId const &,class TUid,class TDesC8 const &) <C:/LocaNote/src/LocaNoteListViewView.cpp #184> + 8 - LocaNote.exe! 108813da()
Ordinal372 + 67 - avkon.dll! 6c11bd3()
Ordinal1330 + 462 - avkon.dll! 6c8748e()
Ordinal1330 + 75 - avkon.dll! 6c8730b()
Ordinal1490 + 39 - euser.dll! 60001487()
Ordinal1656 + 1200 - euser.dll! 600020c0()
Ordinal1656 + 727 - euser.dll! 60001ee7()
Ordinal1656 + 221 - euser.dll! 60001ced()
Ordinal1656 + 10 - euser.dll! 60001c1a()
Ordinal588 + 126 - cone.dll! 4060a4de()
Ordinal322 + 503 - eikcore.dll! 40b55077()
E32Main(void) <C:/LocaNote/src/LocaNoteApplication.cpp #55> + 29 - LocaNote.exe! 10883a24()
__E32Startup <L:/src/cedar/generic/base/e32/euser/epoc/win32/uc_exe.cpp #83> + 5 - LocaNote.exe! 1088ef08()
Ordinal274 + 1759 - ekern.exe! 496947f()
Ordinal454 + 407 - ekern.exe! 4967987()
kernel32.dll! 7c80b713()

It must be read from the bottom to the top. Read, in this case, the offending code is in ConstructL, which is the last user generated on the top

Internal Links

 

External Links

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值