×
Namespaces

Variants
Actions

Обнаружение утечек памяти с помощью HookLogger

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

Пример кода
Исходный файл: Media:HookLogger.zip

Совместимость
Платформа(ы):
Symbian

Статья
Перевод:
Carbider
Последнее редактирование: hamishwillee (09 Dec 2011)

Находить утечки памяти в программном коде - это одна из наиболее затратных задач во времени разработчика. Если случается так, что Ваше приложение завершается паникой с некоторой утечкой памяти, то иногда весьма трудно найти неверный участок программы, просто анализируя её. Using HookLogger это отличный инструмент-эмулятор от Symbian, который помогает быстро найти утечку.

Contents

Как работает HookLogger?

Этот инструмент подменяет EUSER.DLL своим собственным, чтобы вести журналы распределения памяти, создания процессов и потоков, высвобождения и т.д. Приложение 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 всегда налагается это ограничение.

Конечно, Вы и сами можете подменить EUSER.DLL вручную.

Использование

1. Для использования HookLogger, с ним поставляется скрипт. Откройте командную строку, находясь в установочной директории HookLoggers'а и впишите:

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' не распознан как внешняя или внутренняя команда, исполняемая программа или пакетный файл.

Ошибка при запуске "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 (Обзор файла EXE)' и найдите Ваше приложение, в котором происходит утечка и которое Вы хотите проанализировать. В выпадающем списке выберите 'Include only checked (включать только отмеченные)'.

4. Запустите эмулятор.

5. Запустите Ваше приложение в эмуляторе, воспроизведите утечку памяти и закройте его.

6. Проверьте вкладку 'Heap (куча)' в HookLogger'е, а затем нажмите кнопку 'List all allocs (вывести список распределения памяти)'.

Вы увидите список потерянных данных. С помощью 'Alloc details (детали распределения)' Вы получите всю необходимую информацию: стек вызова, когда потерянная память была выделена.

Обратите внимание!

Не забудьте восстановить старый EUSER.DLL после использования HookLogger, так как эта библиотека работает медленно и использует много ресурсов!

HookEUSER -r winscw

Внутренние Ссылки (на английском)


Внешние Ссылки

This page was last modified on 9 December 2011, at 04:00.
121 page views in the last 30 days.
×