符號支援

正確設定 Windows 效能分析器 (WPA) 時,WPA 會顯示記錄中找到之位址的符號檔中的符號名稱。

若要解碼符號,工具必須找出程式資料庫檔案,稱為程式資料庫 (PDB) 檔案或符號檔,才能建置完整的呼叫堆疊。 當系統建置元件時,編譯器和連結器會產生 PDB 檔案。 Microsoft 為線上符號伺服器中的許多 Microsoft 產品提供程式資料庫檔案。 適用于 Windows 和 WPA 的 Microsoft 偵錯工具會使用線上符號伺服器來查閱符號資訊。 因此,如果未在本機複製符號檔,則電腦必須連線到網際網路。 Windows Performance Toolkit 使用與 Windows 偵錯工具相同的符號解碼基礎結構, Windbg.exe。 如需詳細資訊,請參閱 WinDbg

若要設定符號支援,您必須定義 _NT_SYMBOL_PATH 環境變數。 下列範例會設定符號路徑,以搭配 C:\symbols 中的下游存放區使用 Microsoft 公用符號伺服器:

set _NT_SYMBOL_PATH= srv*C:\symbols*https://msdl.microsoft.com/downloads/symbols

請注意,此範例是單一命令列。

此符號路徑中的 URL 會指定線上 Microsoft 符號伺服器。 星號 (C:\symbols) 之間的路徑會指定下游存放區。 這是符號解析系統保留符號檔的本機快取。 WPA 工具也會從您開發的元件解碼符號。 將一或多個路徑新增至 _NT_SYMBOL_PATH ,其中包含您要記錄之元件的 PDB 檔案。 例如,下列範例示範如何為上一個範例設定路徑:

set _NT_SYMBOL_PATH=c:\coding\fs\release;srv*C:\symbols*

當 Xperf 或 WPA 解碼符號時,Xperf 或 WPA 會在 \symcache 目錄中的磁片上快取原始符號檔或 PDB 的壓縮版本。 若要這樣做,Xperf 或 WPA 會使用當時可用的符號。 Microsoft 外部提供的作業系統符號是公用符號。 這些符號包含的資訊小於內部私用符號。 在黑箱測試中,公用符號也可以包含不正確的資訊。 私用符號較可靠,可以在保密協定下取得。 如果使用者已使用公用符號解碼錄製,然後使用者取得私人符號,使用者必須先清除 \symcache 目錄,Xperf 或 WPA 才能探索新的私人符號。

疑難排解符號解碼

符號解碼支援很複雜。 必須符合下列需求:

  • 您必須在 Xperf 命令列上指定 -symbols ,或在開啟錄製之後,于 WPA 的[追蹤] 功能表上選取 [載入符號]。

  • 必須正確設定環境變數。 如需 Xperf 的詳細資訊,請參閱 符號

  • ETW 核心錄製檔案必須已停止並正確合併。 如需詳細資訊,請參閱 停止錄製

  • Windows Performance Recorder (WPR) 或 WPA 會將 ETW 使用者錄製檔案與在同一部電腦上同時取得的核心錄製檔案合併在一起。

  • 您必須能夠存取 _NT_SYMBOL_PATH 指定的二進位和符號來源。 如果您使用符號伺服器,符號伺服器通常只是重新導向器。 在此情況下,您必須能夠存取符號伺服器和符號伺服器指向該裝載二進位檔和符號的網站。

  • _NT_SYMBOL_PATH 必須指向正確的檔案。 如果檔案來自不同的組建或架構,檔案將無法運作。 如果應用程式二進位檔案的版本與 _NT_SYMBOL_PATH 指向的符號版本不同,您就無法檢視呼叫堆疊。

    若要排除符號不符,請使用 Windows 偵錯工具散發中的Symchk.exe,以確保符號符合錄製所在電腦上的符號檔。 例如:

    symchk /v <local_file> /s <sympath_to_name.pdb>
    

    若要排除二進位不符,請使用 fc /b 命令,以確保錄製取得所在電腦上的二進位檔符合卸載共用上的二進位檔。 例如:

    fc /b <local_file> <drop_share_file>
    
  • 在 Xperf 中,您必須至少使用 PROC_THREAD+LOADER 旗標來擷取 ETW 核心錄製。 這些旗標提供有關進程存留期和進程記憶體中映射虛擬位址範圍的基本資訊。 這項資訊可協助 XPerf 將虛擬位址解碼為影像和符號。

    若要確認這些旗標已在 ETW 核心錄製中啟用,請檢查 Xperf -process 事件 (CreateDeleteStart RundownEnd Rundown) 和 Image 事件 (LoadUnloadStart RundownEnd Rundown) 都存在於使用下列命令產生的資料表中:

    xperf -i kernel.etl -a tracestats -detail
    

    注意 根據這些事件是否發生,這些事件可能不會列在資料表中。

Xperf 符號解碼的限制

如果未為可執行映射指定磁片磁碟機 (,Xperf 預設為系統磁片磁碟機,例如 \Path\Library.dll) 。 當您執行 -d/-merge 命令時,如果 Xperf 在錄製期間找不到執行中進程中存在的可執行檔影像,Xperf 就無法擷取對應的影像和符號檔身分識別資訊,並將資訊新增至合併的錄製。 如果沒有該資訊,Xperf 就無法在該錄製中執行該影像的符號解碼。

此問題不會影響其他檔案路徑,例如磁片 I/O 或檔案 I/O 中的路徑。

若要啟用符號解碼,並協助在 Xperf ETW 錄製中啟用正確的影像載入和卸載路徑,您應該儲存可能需要符號解碼的所有可執行檔影像,或系統磁片磁碟機上的影像載入和卸載路徑。 然後,從該磁片磁碟機執行映射。 如果不可能,即使您從另一個磁片磁碟機執行映射,仍會在系統磁片磁碟機上建立映射的鏡像。 例如,如果 C: 是您的系統磁片磁碟機,請在C:\game\bin\binkw32.dll建立相同的D:\game\bin\binkw32.dll複本。

Windows Performance Toolkit

符號

使用 CLR 4.0 NGEN PDB 支援

常見深入分析問題