使用xperf获取符号

问题描述:

我通读文档并使用了概述的命令,但出于某种原因,我似乎没有得到任何符号,只是在汇总表的函数列中有一系列“未知”,除了我尝试调试的应用程序的最上面的一组....我设置环境变量的微软服务器和direcories pdb的包含应用程序。在启动汇总表之前,我还确保选择“加载符号”项目。使用xperf获取符号

根据我正在阅读的信息,应该需要一些时间让tabl在加载符号时显示,但对于我来说,表格几乎是即时显示的,只有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 

它使用什么版本的dbghelp.dll?在使用安装在%SystemRoot%\system32中的dbghelp.dll版本时,我遇到了使用kernrate和其他实用程序的PDB符号时遇到问题。

您可能需要将dbghelp.dllsymsrv.dll从最新版本的Windows调试工具复制到XPerf可以找到它的目录。另外,您需要删除'='之前的空格,否则您将定义“_NT_SYMBOL_PATH  ”变量(包括名称中的尾部空格)。

在行尾添加注释也不起作用。一行连续字符,如'^'通常需要是行上的最后一个字符。当我运行该语句(在XP上)时,我以“_NT_SYMBOL_PATH  ”结束,等于“    C:\Projects\C++\fl lib\bin; REM dlls”并出现关于下一行的错误。

+0

我刚在这里添加了张贴的评论。然而,去除=周围的空间似乎已经修复了它。奇怪的,因为var被设置,因为我检查了它...一定是变量值的领先空间,xperf不喜欢,并没有解析值的其余部分... – 2009-02-28 10:56:01

尝试设置

TRACE_FORMAT_SEARCH_PATH 

环境变量。如果这不起作用,则可能需要使用TracePdb.exe从PDB手动提取TMF文件(或者至少使用常规路径而不是SYM *路径)。这是迄今为止使用ETL痕迹/ XPerf中最烦人的部分。