Руководства по Использованию Второй части

■                Тип защиты памяти, те, которые Выполняются/Читают и Чтение-запись.

■                Требуемый размер, в байтах.

■                Адрес виртуальной памяти, в котором создавался выделенный блок.

■                Стек вызова в точке, когда API был вызван.

Стек вызова идентифицирует путь выполнения кода в пределах программы, которая привела к запросу выделения. VMMap присваивает Идентификационный номер Сайта Вызова каждому уникальному стеку вызова, который получается. Первый стек вызова - присвоенный ID 1, второй уникальный стек - присвоенный ID 2 и т.д. Если тот же самый путь выполнения кода будет выполняться многократно, то у каждого экземпляра будет тот же самый стек вызова, и данные от тех выделений группируются под единственным ID Сайта Вызова.

Примечание. Символы должны быть должным образом сконфигурированы, чтобы получить полезную информацию из инструментованных процессов. См. "Стеки вызова и Символы" в Главе 2 для информации о конфигурировании символов.

Обновите основное представление VMMap, и затем нажмите кнопку Trace. Диалоговое окно Трассировки (показанный в рисунке 7-7) перечисляет все полученные выделения памяти, сгруппированные ID Сайта Вызова. Столбец Function идентифицирует API, который вызвали; столбец Calls указывает, сколько времен, что путь выполнения кода был вызван; столбец Bytes перечисляет общую сумму памяти, выделенной через тот сайт. Значения в столбцах Operation и Protection - значения, которые передали в первый раз, когда сайт вызова был вызван.

 

Рис. 7-7. Диалоговое окно Трассировки VMMap.

Щелкните по знаку "плюс" развернуть сайт вызова и показать адреса виртуальной памяти, в которых была обеспечена требуемая память. Столбец Bytes показывает размер каждого выделения. Отметьте, что, когда память освобождается, последующий запрос выделения через тот же самый сайт вызова мог бы быть удовлетворен в том же самом адресе. Когда это происходит, VMMap не выводит на экран отдельную запись. Столбец Bytes сообщает о размере только первого выделения, предоставленного в том адресе. Однако, сумма, показанная для Сайта Вызова, точна.

По умолчанию диалоговое окно Трассировки показывает только те операции, для которых "Байтов" больше чем 0. Установите флажок "Show all memory operations", чтобы вывести на экран операции, которые не сообщают ни о каких байтах. Они включают операции, такие как RtlCreateHeap, RtlFreeHeap, и VirtualFree (выпуская весь блок выделения).

В рисунке 7-7 сайт вызова, присвоенный ID, 1136 был вызван восемь раз, чтобы выделить 26 Мбайт частной памяти. Тот узел расширяется и показывает адреса виртуальной памяти и требуемые размеры. Поскольку все эти запросы прошли через единственный путь выполнения кода, можно выбрать любого из них или главного узла и нажать кнопку Stack, чтобы видеть что стек вызова сайта, показанный в рисунке 7-8. Если полная символьная информация и исходные файлы доступны, выберите фрейм в вызове, складывают и нажимают кнопку Source, чтобы просмотреть исходный файл в средстве просмотра исходного файла VMMap с обозначенной строкой выбранного источника.

 

Рис. 7-8. Вызовите стек для сайта вызова, к которому получают доступ от диалогового окна Трассировки.

Нажмите кнопку Call Tree в главном окне VMMap для другого способа визуализировать, где Ваша программа выделяет память. Диалоговое окно Дерева Вызова (показанный в рисунке 7-9) идентифицирует общности, и расхождения во всем собранном вызове складывает и представляет их как расширяемое дерево. Самые верхние узлы представляют наиболее удаленные функции в стеках вызова. Их дочерние узлы представляют функции, которые они вызывали, и их дочерние узлы представляют различные функции, они обращались к пути к работе памяти. Через каждую строку графа и % столбцы графа указывают, сколько времен в собранном наборе стеков вызова тот путь выполнения кода был пересечен; Байты и столбцы Bytes % указывают, сколько памяти было ­выделено через тот путь. Можно использовать это, чтобы быстро бурить землю к местам, где большинство выделений было вызвано, или большинство памяти было выделено.

 

Рис. 7-9. Диалоговое окно Дерева Вызова VMMap.

Наконец, можно просмотреть стек вызова для определенного выделения "кучи", выбирая это в Представлении Деталей и нажимая кнопку Heap Allocations, чтобы вывести на экран диалоговое окно Выделений "Кучи". (См. рисунок 7-10). Выберите элемент в диалоговом окне, и щелкните по Stack, чтобы вывести на экран стек вызова, который привел к тому выделению.

Рис. 7-10. Диалоговое окно Выделений "Кучи".


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: