Categories: Lang-RU | RU How To | Инструменты | Отладка
This page was last modified 14:49, 6 December 2007.
Обнаружение утечек памяти с помощью HookLogger
From Forum Nokia Wiki
Перевод с английского, оригинальная статья находится здесь.
Находить утечки памяти в программном коде - это одна из наиболее затратных задач во времени разработчика. Если случается так, что Ваше приложение завершается паникой с некоторой утечкой памяти, то иногда весьма трудно найти неверный участок программы, просто анализируя её. 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
Внутренние Ссылки (на английском)
Внешние Ссылки
| Related Discussions | ||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| EAppOrientationLandscape и вывод битмапа на экран | DM | Russian Developer Forum - Форум Российских разработчиков | 6 | 2008-06-09 21:36 |
| Help: Active Object Error | skyup | General Symbian C++ | 8 | 2008-05-11 18:36 |
| Convert TPtrC to e.g. TBuf8 | kaiten-sushi | General Symbian C++ | 33 | 2007-02-27 23:09 |
| 如何检测内存泄漏? | curiosity | Symbian | 1 | 2007-06-21 13:24 |
| «Certified Signed» а нужно ли? | karatay | Russian Developer Forum - Форум Российских разработчиков | 11 | 2008-04-11 13:02 |
