Обнаружение утечек памяти с помощью HookLogger
Метаданные
Пример кода
Статья
Находить утечки памяти в программном коде - это одна из наиболее затратных задач во времени разработчика. Если случается так, что Ваше приложение завершается паникой с некоторой утечкой памяти, то иногда весьма трудно найти неверный участок программы, просто анализируя её. 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
Внутренние Ссылки (на английском)


(no comments yet)