首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用xperf获取符号

使用xperf获取符号
EN

Stack Overflow用户
提问于 2009-02-28 00:38:16
回答 2查看 4.8K关注 0票数 1

我通读了文档,并使用了概述的命令,但由于某种原因,我似乎没有得到任何符号,只是在汇总表的function列中的一系列“未知”,除了我试图调试的应用程序的最上面的一组之外。我将环境变量设置为microsoft服务器和包含应用程序的pdb的目录。在调出汇总表之前,我还确保选择了"Load Symbols“项。

根据我正在阅读的信息,在加载符号时,应该需要一段时间才能让表显示出来,但是对我来说,表几乎是立即显示的,只有sprite.exe->sprite.exe中最上面的项有函数名,函数的其他行要么是空的,要么是“未知”

我使用的是Vista SP1。

这是我使用的批处理文件。我做了什么阻止sybols被加载的事情吗?

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-02-28 00:44:22

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

您可能需要将dbghelp.dllsymsrv.dll从最新版本的调试工具复制到XPerf可以找到它的目录中。

此外,您需要删除'=‘前的空格,否则您将定义“_NT_SYMBOL_PATH”变量(包括名称中的尾随空格)。

在行尾包含注释也是行不通的。诸如“^”之类的行续行符通常需要是该行的最后一个字符。当我(在XP上)运行该语句时,我得到的结果是“_NT_SYMBOL_PATHC:\Projects\C++\fl lib\bin; REM dlls”等于“C:\Projects\C++\fl lib\bin; REM dlls”,并且关于下一行的信息是错误的。

票数 2
EN

Stack Overflow用户

发布于 2009-02-28 02:19:58

尝试设置

代码语言:javascript
复制
TRACE_FORMAT_SEARCH_PATH

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/597211

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档