Stapeltags
Im Windows® Performance Analyzer (WPA) sind Stapeltags ein Feature, mit dem Sie Bezeichnungen (Tags) erstellen können, damit Sie besser ermitteln können, welche Teile der Aufrufliste betroffen sind.
Grundlegendes zu Unterschieden zwischen Stapeltags und Stapelrahmentags
Sie können sich Stapel (Rahmentags) und Stapeltags als zwei Ansichten derselben Daten vorstellen, die in der Stapelspalte verfügbar sind. Sie können eine Stapelspalte so konfigurieren, dass sie als Stapeltag oder Stapelspalte (Rahmentag) im Ansichts-Editor angezeigt wird.
Eine Aufrufliste besteht aus einer Liste von Rahmen. Wenn eine Aufrufliste in der Form A -> B -> C vorliegt, gibt es drei Rahmen: A, B und C. Stapelspalten (Rahmentags) ordnen jeden Aufruflistenrahmen einem Tag oder standardmäßig module!method zu, wenn kein Tag vorhanden ist.
Beispielsweise kann die Aufrufliste A -> B -> C-> D in der Ansicht Stapel (Rahmentags) zu A -> FrameTagB -> FrameTagC -> D werden. Jedes der Rahmentags kann eine Hierarchie basierend auf der Hierarchie der Definition der Tags in der Datei „*.stacktags“ aufweisen (der tatsächliche Wert von FrameTagB kann z. B. „HTML\Script\OM“) sein.
Ein Stapeltag fasst eine gesamte Aufrufliste zusammen, indem ein einzelner Tagname verwendet wird. Beispielsweise wird das unterste zugeordnete Frametag in der Regel zum Stapeltag gemacht, sofern keine Priorität für Tags angegeben ist. Mit demselben Beispiel A -> B -> C -> D, in dem die Frametagansicht A -> FrameTagB -> FrameTagC -> D ist, ist die Stapeltagansicht einfach: FrameTagC.
Neben dem normalen Tag für die genaue Übereinstimmung mit Modul und Methode können Sie auch HintTag mit HintOperator als Callee oder Caller definieren. Beispielsweise wird ein HintTag mit HintOperator als Callee für B definiert. Die Aufrufliste A -> B -> C -> D in der Ansicht Stapel (Rahmentags) kann A -> FrameTagB -> ModuleOfC -> D werden, und seine StackTag-Ansicht ist FrameTagB -> ModuleOfC. Das Modul von C wird dynamisch als neues Stapeltag erstellt. Explizites Festlegen des OnlyShowModule-Attributs von HintTag als „false“ würde C zum neuen Stapeltag statt ModuleOfC machen. Das OnlyShowModule-Attribut ist standardmäßig „true“. Der typische Anwendungsfall ist, automatisch RPC-Serverfunktionen anzufügen. Ihre direkte Anruferfunktion ist rpcrt4.dll! Invoke_epilog1_start. Sie können ein HintTag für diese allgemeine Anruferfunktion definieren, um dies zu erreichen.
Identifizieren der Kosten einer gemeinsamen Funktion durch Definieren eines Hinweistags
Normalerweise identifiziert die Spalte Stapeltag die Kosten einer einzelnen Funktion in einem einzelnen Modul. WPA kann jedoch die Kosten aller von dieser Funktion aufgerufenen Funktionen konsolidieren, wenn Sie ein Hinweistag und einen Hinweisoperator definieren. Das Hinweistag ist eine Bezeichnung für die allgemeine Funktion und die Gruppe von Funktionen, die sie aufruft, und der Hinweisoperator identifiziert die allgemeine Funktion entweder als Aufruffunktion, den Caller, oder als aufgerufene Funktion, den Callee.
Der typische Anwendungsfall ist, ein Hinweistag zu definieren, sodass WPA automatisch RPC-Serverfunktionen angibt. Sie können auch ein Hinweistag definieren, um z. B. die Sperrenhalter oder die Funktionen anzuzeigen, die Heaps zuweisen.
Definieren von Hinweistags
Hinweistags und Hinweisoperatoren werden in XML in der folgenden Syntax mit den Attributen und Werten definiert, die in der folgenden Tabelle beschrieben sind.
<HintTag
Name="string-label"
Priority="integer"
HintOperator="caller-or-callee"
OnlyShowModule="Boolean">
<Entrypoint
Module="module-name"
Method="method-name">
</HintTag>
Element | attribute | Beschreibung |
---|---|---|
HintTag | Name | Als Bezeichnung zu verwendende Zeichenfolge |
Priority | Eine ganze Zahl. Der Standardwert ist 0 (null). | |
HintOperator | Der Wert ist jeweils „Caller“ oder „Callee“ für die Funktion als Anrufer bzw. Anrufempfänger. | |
OnlyShowModule | Boolesch, optional. Der Standardwert ist true. | |
Einstiegspunkt | Modul | Name des Moduls, das die Methode enthält. |
Methode | Name der Methode, die der Einstiegspunkt ist. |
Um die Hinweistags hinzuzufügen, die Sie in einer XML-Datei definiert haben, verwenden Sie das Verfahren unter Hinzufügen von Stapeltags zur Definitionsdatei für Stapeltags weiter unten in diesem Thema.
Beispiel für die Verwendung eines Hinweistags
Betrachten Sie die Beispieldaten, die in der folgenden Abbildung gezeigt werden.
Dieses Beispiel enthält 4 RPC-Funktionen, die in „WbemCore.dll“ aufgerufen werden:
- CWbemLevel1Login::NTLMLogin
- CWbemNamespace::GetObjectW
- CWbemNamespace::PutInstance
- CWbemNamespace::ExecMethod
Die Kosten des Aufrufens dieser Funktionen konsolidieren zu können, ist nützlich für die Ermittlung der Kosten von RPC-serverseitigen Funktionen, da WPA die Gesamtkosten als RPC in der Spalte Stapeltag anzeigt.
Mit der als Einstiegspunkt für das Hinweistag RPC definierten rpcrt4.dll!Invoke-Funktion und dem als Callee angegebenen Hinweisoperator stellt WPA rpcrt4.dll!Invoke mit RPC und wbemcore.dll!CWbemLevel1Login::NTLMLogin mit RPC\wbemcore.dll\CWbemLevel1Login::NTLMLogin dar. In der Spalte Stapeltag zeigt WPA die Kosten für die serverseitige RPC-Funktion wbemcore.dll!CWbemLevel1Login::NTLMLogin mit 31,85574 ms an. In „WbemCore.dll“ ist NTLMLogin die oberste RPC-Funktion in der Hierarchie der aufgerufenen Funktionen.
Das Hinweistag RPC wird durch die folgende XML-Datei definiert.
<HintTag Name="RPC" HintOperator="Callee">
<Entrypoint Module="rpcrt4.dll" Method="Invoke"/>
</HintTag>
Hinzufügen von Stapeltags zur Stapeltagsdefinitions-Datei
Gehen Sie wie folgt vor, um der Stapeltagsdefinitions-Datei eine Stapeltagdefinition hinzuzufügen:
Wählen Sie im Menü Ablaufverfolgung und dann die Option Ablaufverfolgungseigenschaften aus. Die Registerkarte Ablaufverfolgungseigenschaften wird geöffnet.
Klicken Sie im Bereich „Stapeltagsdefinition“ für den gewünschten Speicherort auf Hinzufügen.
Navigieren Sie zu dem Bereich, der die Stapeltagsdatei enthält, wählen Sie sie aus, und klicken Sie dann auf Öffnen.
Entfernen eines Stapeltags aus der Stapeltagsdefinitions-Datei
Gehen Sie wie folgt vor, um aus der Stapeltagsdefinitions-Datei eine Stapeltagsdefinition zu entfernen:
Wählen Sie im Menü Ablaufverfolgung und dann die Option Ablaufverfolgungseigenschaften aus. Die Registerkarte Ablaufverfolgungseigenschaften wird geöffnet.
Wählen Sie im Bereich „Stapeltagsdefinition“ die Stapeltagsdefinitionen aus, die Sie entfernen möchten, und klicken Sie dann auf Entfernen.
Warnung Stellen Sie sicher, dass Sie die ausgewählten Stapeltagsdefinitionen entfernen möchten, da Sie nicht die Möglichkeit haben, abzubrechen, sobald Sie auf Entfernen klicken.
Erneutes Laden der Stapeltagsdefinitions-Datei
Gehen Sie wie folgt vor, um eine Stapeltagsdefinition erneut in die Stapeltagsdefinitions-Datei zu laden:
Wählen Sie im Menü Ablaufverfolgung und dann die Option Ablaufverfolgungseigenschaften aus. Die Registerkarte Ablaufverfolgungseigenschaften wird geöffnet.
Klicken Sie im Bereich „Stapeltagsdefinition“ auf Neu laden. Sie können mehrere Stapeltags laden, indem Sie die UMSCHALTTASTE gedrückt halten und auf die einzelnen Stapeltagsdefinitionen klicken.
Problembehandlung bei der Stapeltagsdatei
Führen Sie die folgenden Schritte aus, um Probleme in ihrer Stapeltagsdatei in WPA zu untersuchen:
Klicken Sie im Menü auf Fenster, und wählen Sie dann Diagnosekonsole aus. Die WPA-Anzeige wird aufgeteilt: in den Graph-Explorer und die Analyse in der oberen Hälfte des Bildschirms und die Diagnosekonsole in der unteren Hälfte des Bildschirms.
Tipp Sie können auch auf die Diagnosekonsole in der unteren linken Ecke von WPA zugreifen, indem Sie auf Diagnosekonsole klicken. Sobald sie geöffnet ist, können Sie sie auch auf ein separates Fenster ziehen oder oben oder an der Seite andocken.
Die Diagnosekonsole enthält Informationen zu Ausnahmen, die während des Analyseworkflows auftreten. Sie können Symboldecodierungsprobleme von dieser Konsole aus diagnostizieren.