用xperf获取符号

时间:2009-02-28 00:38:16

标签: windows profiling xperf

我阅读了文档,并使用了概述的命令,但出于某些原因,我似乎没有得到任何符号,只是摘要表的函数列中的一系列“未知数”,除了最顶层的应用程序之外的所有内容我正在尝试调试....我将环境变量设置为微软服务器和包含应用程序的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

2 个答案:

答案 0 :(得分:2)

它使用的dbghelp.dll版本是什么?在使用kernrate中安装的dbghelp.dll版本时,我无法让PDB符号与%SystemRoot%\system32和其他实用程序一起使用。

您可能需要将dbghelp.dllsymsrv.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

中最烦人的部分