Поддержка символов
Если windows Анализатор производительности (WPA) настроена правильно, WPA отображает символьные имена из файлов символов для адресов, найденных в записи.
Чтобы декодировать символы, инструменты должны найти файлы базы данных программы, называемые PDB-файлами или файлами символов, для создания полных стеков вызовов. Компилятор и компоновщик создают PDB-файлы, когда система создает компонент. Корпорация Майкрософт предоставляет файлы базы данных программы для многих продуктов Майкрософт на онлайн-сервере символов. Средства отладки Майкрософт для Windows и WPA используют онлайн-сервер символов для поиска сведений о символах. Поэтому компьютер должен быть подключен к Интернету, если файлы символов не копируются локально. Набор средств для повышения производительности Windows использует ту же инфраструктуру декодирования символов, что и отладчик Windows, Windbg.exe. Дополнительные сведения см. в разделе WinDbg.
Чтобы настроить поддержку символов, необходимо определить переменную среды _NT_SYMBOL_PATH . В следующем примере задается путь к символам для использования общедоступного сервера символов Майкрософт вместе с подчиненным хранилищем в C:\symbols:
set _NT_SYMBOL_PATH= srv*C:\symbols*https://msdl.microsoft.com/downloads/symbols
Обратите внимание, что этот пример является одной командной строкой.
URL-адрес в этом пути к символам указывает сетевой сервер символов Майкрософт. Путь между звездочками (C:\symbols) указывает нижестоящее хранилище. Это локальный кэш, в котором система разрешения символов хранит файлы символов. Средства WPA также декодируют символы из разрабатываемых компонентов. Добавьте один или несколько путей к _NT_SYMBOL_PATH , содержащим PDB-файлы для компонентов, которые требуется записать. Например, в следующем примере показано, как был настроен путь для предыдущего примера:
set _NT_SYMBOL_PATH=c:\coding\fs\release;srv*C:\symbols*
Когда Xperf или WPA декодирует символы, Xperf или WPA кэширует сокращенную версию исходных файлов символов или PDB на диске в каталоге \symcache . Для этого Xperf или WPA используют символы, доступные в то время. Символы операционной системы, доступные за пределами корпорации Майкрософт, являются общедоступными символами. Эти символы содержат меньше информации, чем внутренние закрытые символы. При тестировании с помощью черного ящика общедоступные символы также могут содержать неверные сведения. Частные символы, которые являются более надежными, можно получить в рамках соглашений о неразглашении. Если пользователь декодировал запись с помощью открытых символов, а затем получает закрытые символы, пользователь должен очистить каталог \symcache , прежде чем Xperf или WPA смогут обнаружить новые частные символы.
Устранение неполадок с декодированием символов
Поддержка декодирования символов сложна. Необходимо выполнить следующие требования.
После открытия записи необходимо указать
-symbols
в командной строке Xperf или выбрать Команду Загрузить символы в меню Трассировка в WPA.Переменные среды должны быть настроены правильно. Дополнительные сведения о xperf см. в разделе Символы.
Файл записи ядра ETW должен быть остановлен и объединен правильно. Дополнительные сведения см. в разделе Остановка записи.
Средство записи производительности Windows (WPR) или WPA объединяет файл записи пользователя ETW с файлом записи ядра, который одновременно создается на том же компьютере.
Необходимо иметь доступ к двоичным источникам и источникам символов, которые _NT_SYMBOL_PATH указывает. Если используется сервер символов, сервер символов часто является просто перенаправлением. В этом случае необходимо иметь доступ как к серверу символов, так и к сайтам, на которые указывает сервер символов, где размещаются двоичные файлы и символы.
_NT_SYMBOL_PATH должны указывать на правильные файлы. Если файлы существуют из другой сборки или архитектуры, файлы не будут работать. Если версия двоичных файлов приложения отличается от версии символов, на которые _NT_SYMBOL_PATH указывает, стеки вызовов просматривать нельзя.
Чтобы исключить несоответствие символов, используйтеSymchk.exe из дистрибутива Средств отладки для Windows , чтобы убедиться, что символы соответствуют файлам символов на компьютере, на котором была сделана запись. Пример:
symchk /v <local_file> /s <sympath_to_name.pdb>
Чтобы исключить бинарное несоответствие, используйте
fc /b
команду , чтобы убедиться, что двоичные файлы на компьютере, на котором была сделана запись, совпадают с двоичными файлами в общей папке. Пример:fc /b <local_file> <drop_share_file>
В Xperf необходимо записать запись ядра ETW, используя по крайней
PROC_THREAD+LOADER
мере флаги . Эти флаги предоставляют основные сведения о времени существования процесса и диапазонах виртуальных адресов изображений в памяти процесса. Эти сведения помогают XPerf декодировать виртуальные адреса для изображений и символов.Чтобы убедиться, что эти флаги включены в записи ядра ETW, проверка, что события Xperf -process (Create, Delete, Start Rundown, End Rundown) и Image (Load, Unload, Start Rundown, End Rundown) присутствуют в таблице, созданной с помощью следующей команды:
xperf -i kernel.etl -a tracestats -detail
Примечание Все эти события могут не отображаться в таблице в зависимости от того, произошли ли эти события.
Ограничение в декодировании символов Xperf
Xperf по умолчанию использует системный диск, если диск не указан для исполняемого образа (например ,\Path\Library.dll). Если при выполнении -d/-merge
команды Xperf не удается найти исполняемый образ, который существовал в запущенном процессе во время записи, Xperf не сможет получить сведения об идентификаторе файла изображения и символов и добавить эти сведения в объединенную запись. Без этой информации Xperf не может выполнять декодирование символов для этого изображения в этой записи.
Эта проблема не влияет на другие пути к файлам, например пути дискового ввода-вывода или файлового ввода-вывода.
Чтобы включить декодирование символов и обеспечить правильные пути загрузки и выгрузки изображений в записях Xperf ETW, следует хранить все исполняемые изображения, для которых может потребоваться декодирование символов или пути загрузки и выгрузки изображений на системном диске. Затем запустите образы с этого диска. Если это невозможно, создайте зеркало образов на системном диске, даже если вы запускаете образы с другого диска. Например, если системным диском является C:, создайте идентичную копию D:\game\bin\binkw32.dll на C:\game\bin\binkw32.dll.
Связанные темы
Набор средств для оценки производительности Windows