加载符号

可以在 Windows Performance Analyzer (WPA) 中设置以下用户首选项:

  • 加载符号

  • 配置符号路径

若要更改这些选项,打开记录,然后在“跟踪”菜单上选择选项。

托管符号

符合以下要求的系统支持托管进程的符号解析和堆栈:

  • 在 Windows 8 或更高版本上安装了 .NET Framework 4.5 或更高版本

  • 在 x86 计算机上安装了 .NET Framework 4.0 或更高版本

当你使用 WPR 捕获跟踪时,WPR 将启用解析跟踪中的托管符号所需的所有提供程序。 WPR 会在保存的跟踪旁边创建一个文件夹,其中包含这些托管符号的 PDB 文件。 当 WPA 打开跟踪时,WPA 将查找此文件夹,并将其自动添加到符号路径。 如果未使用 WPR 生成跟踪,.NET Framework 程序的任何符号可能不会完全解码或根本不解码。

JavaScript 符号

运行以下软件的系统支持 JavaScript 进程的符号解析和堆栈:

  • 具有 Internet Explorer 10 或更高版本的 Windows 7

  • 在 Windows 8 上使用 JavaScript 的应用程序

WPA 让所需的提供程序能够在支持的系统上为 JavaScript 代码解码符号。 JavaScript 方法地址和堆栈帧将解码为 JavaScript 文件名、方法名称、行号和列号。

相对路径和嵌入式环境变量

_NT_SYMBOL_PATH 和 _NT_SYMCACHE_PATH 环境变量可以使用相对路径、绝对路径、网络共享路径或嵌入式环境变量。 当你首次设置相对路径时,WPA 会将相对路径转换为绝对路径。 WPA 转换程序启动时 WPA 从环境变量加载的相对路径。

当你关闭对话框时,WPA 会转换你在“配置符号路径”对话框中输入的相对路径。 对当前目录的更改不会影响已设置的相对路径。 当你首次打开“配置符号路径”对话框时,此对话框会显示当前设置的路径,你可以看到 WPA 扩展的任何相对路径。

WPA 在扩展相对路径的同时,会扩展嵌入式环境变量。 由于 WPA 会在程序启动时捕获环境变量,因此对当前正在运行的 WPA 实例之外的环境变量的更改不会出现在该实例中。

其他使用 _NT_SYMCACHE_PATH 环境变量的程序(如 WinDbg 或 Microsoft Visual Studio)可能不会以相同的方式处理相对路径或嵌入式环境变量。

SymCache 路径

WPA 使用 SymCache 文件来缓存程序数据库 (PDB) 文件中的符号信息,这种方式紧凑且易于访问。 WPA 使用某个跟踪的符号填充 SymCache 文件夹后,重新加载该跟踪的符号就快得多。 如果 SymCache 文件太大或不再需要,可以安全地删除该 SymCache 文件。 WPA 会根据需要使用新文件重新填充 SymCache 文件夹。 你也可以将 SymCache 文件复制到另一台计算机,或者通过网络共享文件,以加快不同计算机上的符号加载。

如果使用“配置符号路径”对话框将 _NT_SYMCACHE_PATH 环境变量设置为 WPA 无法访问的文件夹,则单击“确定”按钮不会关闭该对话框。 但是,你没有收到错误消息。

如果 _NT_SYMCACHE_PATH 环境变量没有指定或为空,WPA 会在包含 WPA 可执行文件的驱动器的根目录下创建一个 SymCache 文件夹。 如果 _NT_SYMCACHE_PATH 环境变量正在网络共享上运行,该变量会在包含 Program Files 文件夹的驱动器的根目录下创建一个 SymCache 文件夹。 此目录通常是驱动器 C。

SymCache 示例

以下命令将 SymCache 文件放在 C:\SymCache 文件夹中:

C:\SymCache

以下命令将 SymCache 文件放在 C:\SymCache 文件夹中,在 \\network\SymCache 文件夹中搜索符号,然后处理 _NT_SYMBOL_PATH 环境变量:

C:\SymCache*\\network\SymCache

此示例将示例在 \\network\SymCache 文件夹中找到的任何符号复制到 C:\SymCache 文件夹中。 这让用户可以创建一个大的 SymCache 文件夹,然后仅将用户在特定跟踪中所需的文件复制到指定文件夹中。

若要搜索多个备用 SymCache 文件夹,请使用星号 (*) 分隔符将文件夹追加到搜索路径。 当 WPA 在其中一个备用位置找到 SymCache 文件时,WPA 仅将该文件复制到路径中的第一个 SymCache 文件夹。 WPA 还会将新创建的 SymCache 文件放入路径中的第一个 SymCache 文件夹中。

若要禁用复制和写入,但仍使用分层搜索功能,应将路径中的第一个位置留空,如以下示例所示:

*\\network\SymCache

发出此命令时,WPA 会搜索 \\network\SymCache 文件夹。 但是,WPA 不会复制结果,也不会将生成的 SymCache 文件写入其他文件夹。

符号路径

有关 _NT_SYMBOL_PATH 环境变量的基本信息,请参阅以下 MSDN 文章:

WPA 中的符号加载取决于 _NT_SYMBOL_PATH 环境变量指定的路径(不包括 WPA 已缓存在 SymCache 文件夹中的符号)。 WPA 按顺序搜索路径,从左侧开始。 但是,从其中一个路径中的 PDB 文件加载符号可能很耗时,尤其是当 PDB 存在于远程计算机上时。 因此,建议将网络路径放在任何本地路径之后,并为任何远程符号服务器使用本地 PDB 缓存。 但是,即使所有符号都存储在本地,WPA 在加载符号期间也可能会无响应。 WPA 在加载完符号后会返回到交互状态。

如果未设置_NT_SYMBOL_PATH 环境变量,WPA 将使用以下默认值:

 .;SRV*\Symbols*https://msdl.microsoft.com/download/symbols;

分号 (;) 分隔了不同的路径。 第一个路径是句点 (.)。 当 WPA 加载跟踪时,WPA 将此路径映射到当前文件夹。 若要详细了解 WPA 处理相对路径的方式,请参阅本文的 SymCache 路径一节。

第二个路径如下所示:

 SRV*\Symbols*https://msdl.microsoft.com/download/symbols

此外,还必须设置 NGEN PB 路径:

set _NT_SYMBOL_PATH=srv*C:\Symbols.NGEN;srv*https://msdl.microsoft.com/download/symbols

当你指定此路径时,WPA 会从 Microsoft 公共符号服务器下载符号,并将 PDB 文件缓存在 \Symbols 文件夹中(此文件夹是相对于 Windows Performance Toolkit 安装文件夹的)。 因此,WPA 将 Symbols 文件夹放在 SymCache 文件夹旁边。 但是,如果 SymCache 文件夹位于网络共享上,WPA 将在存放 Program Files 文件夹的驱动器的根目录下创建 Symbols 文件夹。 此目录通常是驱动器 C。

如果你不想从 PDB 文件中搜索和加载符号,可以将 _NT_SYMBOL_PATH 环境变量设置为一个不包含符号的本地文件夹,例如句点 (.)。 不要将_NT_SYMBOL_PATH 环境变量留空。 如果将_NT_SYMBOL_PATH 环境变量留空,WPA 将使用默认值。

当 WPA 打开记录时,WPA 将查找与使用 .ngenpdb 扩展名的跟踪同名的文件夹。 如果 WPA 找到此文件夹,WPA 会将文件夹追加到 _NT_SYMBOL_PATH 环境变量的末尾。 Windows Performance Recorder (WPR) 会自动创建一个文件夹,其中包含 WPR 在记录期间捕获的托管代码的 PDB 文件。 例如,如果你在 WPA 中打开 C:\trace.etl 记录,WPA 将搜索 C:\trace.etl.ngenpdb 文件夹。 如果此文件夹存在,WPA 会将该文件夹添加到 _NT_SYMBOL_PATH 环境变量。

WPA 功能

加载符号或配置符号路径

使用 CLR 4.0 NGEN PDB 支持

常见的“深入分析”问题