Поделиться через


Подготовка к использованию UMDH

Перед использованием кучи дампа в режиме пользователя (UMDH) необходимо выполнить задачи конфигурации, описанные в этом разделе, чтобы записать выделение кучи для процесса. Если компьютер настроен неправильно, UMDH не создаст никаких результатов, либо результаты будут неполными или неверными.

Создание базы данных трассировки стека в пользовательском режиме

Перед использованием UMDH для записи выделения кучи для процесса необходимо настроить Windows для отслеживания трассировок стека.

Чтобы включить запись трассировки стека для процесса, используйте GFlags , чтобы задать флаг базы данных трассировки в режиме пользователя для процесса. Это можно сделать с помощью любого из следующих методов:

  • В графическом интерфейсе GFlags выберите вкладку "Файл изображения". Введите имя процесса, включая расширение имени файла (например, Notepad.exe). Нажмите клавишу TAB, выберите "Создать базу данных трассировки стека пользовательского режима" и нажмите кнопку "Применить".

  • Кроме того, используйте следующую командную строку GFlags, где ImageName — это имя процесса (включая расширение имени файла):

    gflags /i ImageName +ust

По умолчанию объем собираемых данных трассировки стека ограничен 32 МБ на процессоре x86 и 64 МБ на процессоре x64. Если необходимо увеличить размер этой базы данных, выберите вкладку "Файл изображения" в графическом интерфейсе GFlags, введите имя процесса, нажмите клавишу TAB , установите флажок Stack Backtrace (Megs), введите значение (в МБ) в связанном текстовом поле и нажмите кнопку "Применить".

Обратите внимание , что увеличьте эту базу данных только при необходимости, так как она может истощить ограниченные ресурсы Windows. Если больше не требуется размер, верните этот параметр в исходное значение.

Эти параметры влияют на все новые экземпляры программы. Он не влияет на запущенные в настоящее время экземпляры программы.

Доступ к необходимым символам

Перед использованием UMDH необходимо иметь доступ к соответствующим символам приложения. UMDH использует путь символа, указанный переменной среды _NT_SYMBOL_PATH. Задайте эту переменную равным пути, содержащего символы для приложения.

Если вы также включаете путь к символам Windows, анализ может быть более полным. Синтаксис для этого пути символа совпадает с синтаксисом, используемым отладчиком; Дополнительные сведения см. в разделе "Путь к символам".

Например, если символы для приложения находятся в папке C:\MyApp\Symbols, и вы установили файлы символов Windows в \\myshare\winsymbols, используйте следующую команду, чтобы задать путь к символам:

set _NT_SYMBOL_PATH=c:\myapp\symbols;\\myshare\winsymbols

В качестве другого примера, если символы для приложения находятся в C:\MyApp\Symbols, и вы хотите использовать общедоступное хранилище символов Майкрософт для символов Windows, используя C:\MyCache в качестве нижнего хранилища, вы будете использовать следующую команду, чтобы задать путь к символам:

set _NT_SYMBOL_PATH=c:\myapp\symbols;srv*c:\mycache*https://msdl.microsoft.com/download/symbols

Важно предположить, что у вас есть два компьютера: компьютер ведения журнала, в котором создается журнал UMDH и компьютер анализа, в котором анализируется журнал UMDH. Путь к символам на компьютере анализа должен указывать на символы для версии Windows, загруженной на компьютер ведения журнала во время создания журнала. Не указывайте путь к символам на компьютере анализа на сервер символов. Если это сделать, UMDH получит символы для версии Windows, работающей на компьютере анализа, и UMDH не будет отображать значимые результаты.

Отключение кэширования BSTR

Автоматизация (ранее известная как OLE Automation) кэширует память, используемую строками BSTR. Это может предотвратить правильное определение владельца выделения памяти UMDH. Чтобы избежать этой проблемы, необходимо отключить кэширование BSTR.

Чтобы отключить кэширование BSTR, задайте переменную среды OANOCACHE равным 1 (1). Этот параметр необходимо сделать перед запуском приложения, выделение которого необходимо отслеживать.

Кроме того, можно отключить кэширование BSTR внутри самого приложения, вызвав функцию платформа .NET Framework SetNoOaCache. Если вы выбрали этот метод, следует вызвать эту функцию рано, так как все выделения BSTR, которые уже кэшированы при вызове SetNoOaCache , останутся кэшируемыми.

Если необходимо отслеживать выделения, сделанные службой, необходимо задать OANOCACHE в качестве системной переменной среды, а затем перезапустить Windows, чтобы этот параметр вступил в силу.

Поиск идентификатора процесса

UMDH определяет процесс по идентификатору процесса (PID). PiD любого выполняемого процесса можно найти с помощью диспетчера задач, списка задач или TList.