堆疊標記

在 Windows® 效能分析器 (WPA) 中,堆疊標籤是一項功能,可讓您建立標籤 (標籤) ,以協助您更清楚地識別呼叫堆疊 () 受影響的部分。

瞭解堆疊標籤與堆疊框架標籤之間的差異

您可以將 堆疊 (框架標記) 堆疊 標籤視為 Stack 資料行中相同資料的兩個檢視。 您可以在檢視編輯器中,將堆疊資料行設定為堆疊標籤或堆疊資料行 (框架標籤) 。

呼叫堆疊是由框架清單所組成。 如果呼叫堆疊的格式為 A - > B - > C,則有三個框架:A、B 和 C。堆疊資料行 (框架標籤) 將每個呼叫堆疊框架對應至標記或預設為模組如果沒有任何標記存在,則為 方法。

例如,在Stack (Frame Tags) 檢視中呼叫堆疊 A - > B - > C- > D,可能會變成 A - > FrameTagB - > FrameTagC - > D。每個框架標籤都可以根據 *.stacktags 檔案中標籤的定義階層, (例如 FrameTagB 的實際值可以是 「HTML\Script\OM」) 。

堆疊標籤會使用單一標記名稱來摘要整個呼叫堆疊。 例如,除非為標記指定優先順序,否則最下方最對應的框架標籤通常會成為堆疊標籤。 使用相同的 A - B - >> C - > D 範例,其中框架標籤檢視是 A - > FrameTagB - > FrameTagC - > D,堆疊標籤檢視只是:FrameTagC。

除了完全符合模組和方法的一般 Tag 之外,您也可以使用 HintOperator 定義為 Callee 或 Caller 來定義 HintTag。 例如,已針對 B 定義 HintOperator 且具有 HintOperator 的 HintTag。Stack (FrameTags) 檢視中的呼叫堆疊 A - > B - > C - > D 會變成 A - > FrameTagB - > ModuleOfC - > D,而其 StackTag 檢視為 FrameTagB - > ModuleOfC。 C 的模組會動態建立為新的堆疊標記。 明確將 HintTag 的 OnlyShowModule 屬性設定為 false,會使 C 成為新的堆疊標記,而不是 ModuleOfC。 OnlyShowModule 屬性預設為 true。 典型的使用案例是自動設定 RPC 伺服器函式的屬性。 其直接呼叫端函式rpcrt4.dll!Invoke_epilog1_start。 您可以為此通用呼叫端函式定義 HintTag,以達成此目的。

藉由定義提示標記來識別通用函式的成本

一般而言, Stack Tag 資料行會識別單一模組中單一函式的成本。 不過,如果您定義 提示標籤hint 運算子,WPA 可以合併該函式所呼叫之所有函式的成本。 提示標籤是通用函式及其呼叫的函式群組標籤,而 hint 運算子會將通用函式識別為呼叫端、 呼叫端或被 呼叫的函式。

典型的使用案例是定義提示標記,讓 WPA 自動屬性 RPC 伺服器函式。 您也可以定義提示標籤,例如,顯示鎖定持有者或配置堆積的函式。

定義提示標籤

提示標籤和提示運算子定義于 XML 中,其語法中具有下表所述的屬性和值。

<HintTag
   Name="string-label"
   Priority="integer"
   HintOperator="caller-or-callee"
   OnlyShowModule="Boolean">
   <Entrypoint 
      Module="module-name" 
      Method="method-name">
</HintTag>
項目 屬性 描述
HintTag 名稱 要作為標籤使用的字串
優先順序 整數。 預設值為零。
HintOperator 針對呼叫或呼叫的函式,值分別是 「Caller」 或 「Callee」。
OnlyShowModule 布林值,選擇性。 預設值為 true。
進入點 模組 包含 方法的模組名稱。
方法 進入點之方法的名稱。

若要新增您在 XML 檔案中定義的提示標籤,請使用本主題稍後將 堆疊標籤新增至堆疊標籤定義檔中的程式。

使用提示標籤的範例

請考慮下圖所示的範例資料。

含有許多資料行的資料表

在此範例中,WbemCore.dll中呼叫 4 個 RPC 函式:

  • CWbemLevel1Login::NTLMLogin
  • CWbemNamespace::GetObjectW
  • CWbemNamespace::P utInstance
  • CWbemNamespace::ExecMethod

能夠合併呼叫這些函式的成本,有助於判斷 RPC 伺服器端函式的成本,因為 WPA 會將總費用顯示為Stack Tag資料行中的RPC

使用 rpcrt4.dll!叫 用函式定義為提示標籤 RPC的進入點,而指定為被呼叫者的 hint 運算子,WPA 代表 rpcrt4.dll!使用RPC叫用,並 wbemcore.dll!CWbemLevel1Login::NTLMLogin with RPC\wbemcore.dll\CWbemLevel1Login::NTLMLogin。 因此,在 [堆疊標籤 ] 資料行中,WPA 會顯示 wbemcore.dll的成本!CWbemLevel1Login::NTLMLogin,RPC 伺服器端函式為 31.855774ms。 在WbemCore.dll中, NTLMLogin 是所呼叫函式階層中的最上層 RPC 函式。

提示標記 RPC 是由下列 XML 所定義。

<HintTag Name="RPC" HintOperator="Callee">
   <Entrypoint Module="rpcrt4.dll" Method="Invoke"/>
</HintTag>

將堆疊標籤新增至堆疊標籤定義檔案

若要將堆疊標籤定義新增至堆疊標籤定義檔案,請執行下列動作:

  1. 在功能表中,選擇 [追蹤],然後選取 [ 追蹤屬性]。 [ 追蹤屬性] 索引 標籤隨即開啟。

  2. 在 [堆疊標籤定義] 區域中,按一下 [ 新增 至所需的位置]。

  3. 流覽至包含堆疊標籤檔案的區域,選取它,然後按一下 [ 開啟]。

從堆疊標籤定義檔案中移除堆疊標籤

若要從堆疊標籤定義檔案中移除堆疊標籤定義,請執行下列動作:

  1. 在功能表中,選擇 [追蹤],然後選取 [ 追蹤屬性]。 [ 追蹤屬性] 索引 標籤隨即開啟。

  2. 在 [堆疊標籤定義] 區域中,選取您想要移除的堆疊標籤定義,然後按一下 [ 移除]。

    警告 請確定您想要移除選取的堆疊標籤定義 () ,因為按一下 [ 移除] 後,將無法選擇取消。

重載堆疊標籤定義檔

若要將堆疊標籤定義重載至堆疊標籤定義檔案,請執行下列動作:

  1. 在功能表中,選擇 [追蹤],然後選取 [ 追蹤屬性]。 [ 追蹤屬性] 索引 標籤隨即開啟。

  2. 在 [堆疊標籤定義] 區域中,按一下 [ 重載]。 您可以按住 Shift 鍵,然後按一下每個堆疊標籤定義,以載入多個堆疊標籤。

針對堆疊標籤檔案進行疑難排解

若要調查 WPA 中堆疊標籤檔案內的問題,請執行下列動作:

  • 在功能表中,按一下 [ 視窗],然後選取 [診斷主控台]。 WPA 顯示會分割成兩個 -- 畫面上半部的 [圖形 總管] 和 [ 分析 ],以及畫面底部的 [診斷主控台 ]。

    提示 您也可以按一下 [診斷主控台],存取 WPA 左下角的 [診斷主控台]。 開啟之後,您也可以將它拖曳到不同的視窗,或將其停駐在頂端或側邊。

    診斷主控台會列出分析工作流程期間發生的例外狀況相關資訊。 您可以從此主控台診斷符號解碼問題

WPA 使用者介面簡介

診斷主控台