2009-02-28 2 views
1

나는 문서를 읽고 설명 된 명령을 사용했지만 요약 표의 기능 열에 "알 수없는"일련의 기호 만 표시되는 것처럼 보이지는 않습니다. 내가 디버깅하려는 애플 리케이션의 최상위 집합 .... 나는 마이크로 소프트 서버와 애플 리케이션에 대한 pda containg direcories에 환경 변수를 설정합니다. 또한 요약 테이블을 가져 오기 전에 "심볼로드"항목을 선택했는지 확인했습니다.xperf를 사용하여 기호 얻기

내가 읽었던 정보에 대한 표식은 기호를로드하는 동안 테이블을 표시하는 데 약간의 시간이 필요하지만 나에게는 표가 거의 즉시 표시되고 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의 버전은 무엇입니까? 나는 번들 kernrate 및 기타 유틸리티를 사용하여 PDB 심볼을 얻는 데 어려움을 겪었습니다. dbghelp.dll이 설치된 버전은 %SystemRoot%\system32입니다.

최신 디버깅 도구 버전의 Windows에서 dbghelp.dllsymsrv.dll을 XPerf가 찾을 수있는 디렉터리로 복사해야 할 수 있습니다.

또한 '='앞에 공백을 제거해야합니다. 그렇지 않으면 "_NT_SYMBOL_PATH  "변수 (이름에 후행 공백 포함)를 정의합니다.

줄 끝의 주석을 포함하는 것도 작동하지 않습니다. '^'와 같은 줄 연속 문자는 일반적으로 줄의 마지막 문자 여야합니다. 나는 그 성명을 (XP에서) 실행했을 때 "    C:\Projects\C++\fl lib\bin; REM dlls"과 같은 "_NT_SYMBOL_PATH  "으로 끝나고 다음 줄에 대한 오류가 발생했습니다.

TRACE_FORMAT_SEARCH_PATH 

환경 변수를 설정

+0

방금 ​​게시 할 댓글을 추가했습니다. 그러나 공백을 제거하는 것은 그것을 고정시킨 것 같습니다. 이상한 점은 var를 조사했기 때문에 이상하게 여겨졌습니다 ... xperf가하지 못했던 나머지 값을 구문 분석하지 못했던 vars 값의 주요 공간 이었음에 틀림 없습니다 ... –

+0

'foo = a & set foo = b를 입력 해보십시오. 'then'echo "% foo %"& echo "% foo %" '명령 프롬프트에서. 공백은 변수의 이름과 값 모두로 보존됩니다. – bk1e

1

보십시오. 그래도 작동하지 않으면 TracePdb.exe를 사용하여 PDB에서 수동으로 TMF 파일을 추출해야 할 수도 있습니다 (또는 최소한 SYM * 경로 대신 일반 경로를 사용하십시오). 이것은 ETL 추적/XPerf를 사용하는 데있어 가장 성가신 부분입니다.