Утилита HEAPWALK
В составе SDK имеется утилита HEAPWALK , с помощью которой вы можете выполнить анализ содержимого глобальной области памяти. Для любого модуля, загруженного в память (приложения или библиотеки DLL) эта утилита показывает адреса, идентификаторы, размеры и атрибуты блоков памяти. С помощью этой утилиты вы можете проследить за тем, как ваше приложение работает с глобальной областью памяти. Вы можете обнаружить в отлаживаемом приложении часто встречающуюся ошибку, когда оно (приложение) не освобождает полученные им блоки памяти.
Главное окно утилиты HEAPWALK представлено на рис. 2.12.
Рис. 2.12. Главное окно утилиты HEAPWALK
В главном окне находится список, каждая строка которого соответствует одному блоку памяти.
В столбцах списка отображается следующая информация (все численные значения выражаются шестнадцатеричными цифрами):
Название | Описание |
ADDRESS | Адрес блока памяти |
HANDLE | Идентификатор блока памяти |
SIZE | Размер блока памяти в байтах |
LOCK | Содержимое счетчика фиксирования блока памяти. Если для блока памяти запрещен страничный обмен, в этом поле есть буква "P". Если блок памяти зафиксирован и не может быть удален, он обозначается буквой "L" |
FLG | Если блок памяти удаляемый (discardable), в этом поле находится буква "D", если фиксированный - буква "F" |
HEAP | Если объект имеет локальную область памяти, в этом столбце находится буква "Y" |
OWNER | Имя модуля (или приложения), владеющего блоком памяти |
TYPE | Тип объекта (сегмент кода, сегмент данных, ресурс и т. д.) |
С помощью меню "Walk" вы можете выбрать один из трех режимов просмотра глобальной области памяти, выполнить дефрагментацию памяти, запросить удаление удаляемых блоков данных и т. д.
Если в меню "Walk" выбрать строку "Walk Heap", в главном окне утилиты HEAPWALK будет отображаться информация о всех объектах, расположенных в глобальной области памяти.
Для того чтобы просмотреть все удаляемые объекты, выберите из этого меню строку "Walk LRU List".