×
Namespaces

Variants
Actions

使用HookLogger检测内存泄漏

From Nokia Developer Wiki
Jump to: navigation, search
Article Metadata

代码示例
文章
dougcn 在 21 Jun 2008 创建
最后由 hamishwillee 在 15 Dec 2011 编辑

使用HookLogger检测内存泄漏

开发人员在他们的代码中查找内存泄漏是最为费时的任务之一。若你的应用程序退出时发生了内存泄漏,有时通过分析代码定位错误所在是一项很艰难的工作。

由Symbian提供的Using HookLogger 是一款很好的emulator工具,有助于迅速找到泄漏的地方。

Contents

HookLogger如何工作?

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

安装

HookLogger有一个便利的安装程序,可以在File:HookLogger.zip

注意:

  • 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

内部链接

外部链接


This page was last modified on 15 December 2011, at 08:39.
81 page views in the last 30 days.