Получение символов с помощью 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