Namespaces

Variants
Actions

Please note that as of October 24, 2014, the Nokia Developer Wiki will no longer be accepting user contributions, including new entries, edits and comments, as we begin transitioning to our new home, in the Windows Phone Development Wiki. We plan to move over the majority of the existing entries over the next few weeks. Thanks for all your past and future contributions.

使用HookLogger检测内存泄漏

From 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 05:39.
288 page views in the last 30 days.

Was this page helpful?

Your feedback about this content is important. Let us know what you think.

 

Thank you!

We appreciate your feedback.

×