我阅读了文档,并使用了概述的命令,但出于某些原因,我似乎没有得到任何符号,只是摘要表的函数列中的一系列“未知数”,除了最顶层的应用程序之外的所有内容我正在尝试调试....我将环境变量设置为微软服务器和包含应用程序的pdb的direcories。我还确保在打开摘要表之前选择“加载符号”项。
根据我正在阅读的信息,它在加载符号时应该花费一些时间来显示,但是对于我来说,表格几乎立即显示,只有sprite.exe中的最顶层项目 - > sprite.exe有函数名,函数的其他行是空白或“未知”
我正在使用Vista SP1。
这是我使用的批处理文件。我做了什么阻止sybols加载的东西吗?
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
答案 0 :(得分:2)
它使用的dbghelp.dll
版本是什么?在使用kernrate
中安装的dbghelp.dll
版本时,我无法让PDB符号与%SystemRoot%\system32
和其他实用程序一起使用。
您可能需要将dbghelp.dll
和symsrv.dll
从最新版本的Windows调试工具复制到XPerf可以找到的目录中。
此外,您需要删除'='之前的空格,否则您将定义“_NT_SYMBOL_PATH
”变量(包括名称中的尾随空格)。
在一行末尾包含评论也不会起作用。诸如'^'之类的行继续符通常需要是该行的最后一个字符。当我运行该语句时(在XP上),我最终得到“_NT_SYMBOL_PATH
”等于“C:\Projects\C++\fl lib\bin; REM dlls
”并且出现关于下一行的错误。
答案 1 :(得分:1)
尝试设置
TRACE_FORMAT_SEARCH_PATH
环境变量。如果这不起作用,您可能必须使用TracePdb.exe从PDB手动提取TMF文件(或者至少使用常规路径而不是SYM *路径)。这是迄今为止使用ETL trace / XPerf
中最烦人的部分