Windows性能分析器概述(四)
六、Windows性能分析器对符号的支持
正确设置后,Windows性能分析器能够通过符号文件显示特定地址上的符号名。在样本收集和环境转换中符号解码会非常有用。
若要需要解码符号,工具需要找到程序数据文件,比如PDB或者符号文件,用来生成完整的调用堆栈。在生成一个组件时,编译器或者连接器会负责生成PDB文件。微软有在线的符号服务器,提供各种产品的程序数据文件。Microsoft Debugging Tools和WPA使用它来寻找符号信息。需要注意的是,你需要连接到互联网才能使用这个功能。Xperf工具使用与Windows debugger(Windbg.exe)相同的符号解析系统。更多关于windbg和操作系统符号,请参考Debugging Tools for Windows - Overview(英文)。
若要获得符号支持,需要定义一个叫_NT_SYMBOL_PATH的环境变量。下面的例子使用微软公共的符号服务器作为符号路径,并将下载目录设置为c:\symbols:
set _NT_SYMBOL_PATH= srv*C:\symbols*http://msdl.microsoft.com/downloads/symbols
符号路径中的地址指向微软符号服务器。星号之间的路径(c:\symbols)代表下载目录,这是符号解析系统维护的本地缓存。xperf也会解码你自己开发组件的符号,只需要在_NT_SYMBOL_PATH中添加更多的包含需要的符号路径就能做到这一点。下面是一个例子:
set _NT_SYMBOL_PATH=c:\coding\fs\release;srv*C:\symbols*
使用WPA命令行- symbols也可以开启符号解码功能。你可以通过以下命令来获得关于符号支持的更多信息:
xperf –help symbols
调试符号解码
WPA追踪符号解码支持比较复杂。请确认满足一下的条件:
- 在命令行下使用了-symbols参数,或者在打开摘要表格前在性能分析器里选择了”Load Symbols”。
- 按照在线帮助配置了环境变量:
xperf -help symbols
- ETW内核追踪文件已经关闭,并正确地合并。相关信息请参考Stopping a Trace(英文)。
- ETW用户追踪文件由xperf或者性能分析器处理,并与同时在同一台机器生成的内核追踪文件相关联。
- 具有访问二进制文件和_NT_SYMBOL_PATH中指定的路径的权限。如果你使用符号服务器,请注意在很多情况下符号服务器只是做重定向。如果是这样,请确保你同时具有访问符号服务器和真正存有文件服务器的权限。
- 请确认_NT_SYMBOL_PATH指向正确的文件。如果文件是从不同的编译中产生,它们可能不能正常工作。如果二进制文件版本与_NT_SYMBOL_PATH中指向的符号文件版本不符,显示调用堆栈将不能正常工作。
为了避免符号不匹配,请使用Debugging Tools for Windows提供的symchk.exe来检查符号文件是否符合将要追踪的二进制文件:
symchk /v <local_file> /s <sympath_to_name.pdb>
为了避免二进制文件不匹配,使用fc /b来检查本机上使用的二进制文件与服务器上的文件是否一致:
fc /b <local_file> <drop_share_file>
- 请确认在捕获内核追踪时至少使用了PROC_THREAD和LOADER标志。这些标志提供了一些基本信息,包括进程生命周期和镜像文件在进程中的虚拟地址,它会帮助将虚拟地址解码为镜像文件和符号。
为了确保ETW内核追踪开启了这些标志,请查看由以下命令生成的表格中是否存在进程事件和镜像文件事件:
xperf -i kernel.etl -a tracestats -detail
以上文章基于Symbol Support翻译。
译者:张昕毅、焦桢
微软亚太研发集团服务器与开发工具事业部(中国)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述