Получение символов с помощью xperf - PullRequest
1 голос
/ 28 февраля 2009

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

По информации, которую я читал, табло должно отображаться некоторое время, пока загружаются символы, однако для меня таблица отображалась почти мгновенно, и только самые верхние элементы в 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 ]

2 голосов
/ 28 февраля 2009

Какая версия 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», и ошибку в следующей строке.

1 голос
/ 28 февраля 2009

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

TRACE_FORMAT_SEARCH_PATH

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

...