Получение символов с помощью xperf

Я прочитал документы и использовал команды, обрисованные в общих чертах, однако по какой-то причине у меня, кажется, нет никаких символов, просто серия "неизвестных" в столбце функции сводной таблицы для всего, кроме самого верхнего набора приложения, которое я пытался для отладки.... Я установил переменную окружения для сервера Microsoft и директории, связывающиеся с pdb для приложения. Я также убедился, что выбрал пункт "Загрузить символы", прежде чем вызывать сводную таблицу.

В соответствии с информацией, которую я читал, табло должно отображаться некоторое время, пока загружаются символы, однако для меня таблица отображалась почти мгновенно, и только у самых верхних элементов в sprite.exe->sprite.exe были имена функций, другие строки для функции были либо пустыми, либо "неизвестными"

Я использую Vista SP1.

Это командный файл, который я использовал. Я сделал что-нибудь, что помешало бы загрузке символов?

REM start profiler
xperf -on PROC_THREAD+LOADER+INTERRUPT+DPC+PROFILE^
 -stackwalk profile -minbuffers 16 -maxbuffers 1024 -flushtimer 0^
 -f tmp.etl
REM run the app we want to profile
sprite.exe
REM stop
xperf -d profile.etl
REM set symbol path
set _NT_SYMBOL_PATH = ^
 C:\Projects\C++\fl lib\bin;^ REM dlls
 C:\Projects\C++\fl lib\samples\bin;^ REM main exe
 SRV*c:\symbols*http://msdl.microsoft.com/download/symbols
REM display profile
xperf profile.etl

2 ответа

Решение

Какая версия dbghelp.dll это использует? У меня были проблемы с получением символов PDB, работающих с kernrate и другие утилиты при использовании версии dbghelp.dll который установлен в %SystemRoot%\system32,

Вам может понадобиться скопировать dbghelp.dll а также symsrv.dll из последней версии средств отладки для Windows в каталог, где XPerf может найти его.

Кроме того, вам нужно удалить пробел перед '=', иначе вы определяете "_NT_SYMBOL_PATH msgstr "переменная (включая завершающий пробел в имени).

Включение комментариев в конце строки тоже не сработает. Символ продолжения строки, такой как '^', обычно должен быть последним символом в строке. Когда я запустил это утверждение (на XP), я закончил с "_NT_SYMBOL_PATH " равно " C:\Projects\C++\fl lib\bin; REM dlls"и ошибка о следующей строке.

Попробуйте установить

TRACE_FORMAT_SEARCH_PATH

переменная окружения. Если это не сработает, вам, возможно, придется вручную извлечь файлы TMF из ваших PDB, используя TracePdb.exe (или, по крайней мере, использовать обычный путь вместо пути SYM*). Это, безусловно, самая раздражающая часть использования трассировки ETL / XPerf

Другие вопросы по тегам