Получение символов с помощью 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
Решение
Какая версия dbghelp.dll
оно использует?У меня возникли проблемы с работой символов PDB с kernrate
и другие утилиты при использовании версии dbghelp.dll
который установлен в %SystemRoot%\system32
.
Возможно, вам придется скопировать dbghelp.dll
и symsrv.dll
из последней версии инструментов отладки для Windows в каталог, где XPerf сможет его найти.
Кроме того, вам необходимо удалить пробел перед '=', иначе вы определяете "_NT_SYMBOL_PATH
"переменная (включая пробел в конце имени).
Включение комментариев в конце строки также не сработает.Символ продолжения строки, например «^», обычно должен быть последним символом в строке.Когда я запустил этот оператор (на XP), я получил «_NT_SYMBOL_PATH
" равно "C:\Projects\C++\fl lib\bin; REM dlls
" и ошибка в следующей строке.
Другие советы
Попробуйте установить
TRACE_FORMAT_SEARCH_PATH
переменная среды.Если это не сработает, возможно, вам придется вручную извлечь файлы TMF из PDB с помощью TracePdb.exe (или, по крайней мере, использовать обычный путь вместо пути SYM*).Это, безусловно, самая раздражающая часть использования трассировок ETL/XPerf.