Symbolunterstützung

Wenn Windows Performance Analyzer (WPA) ordnungsgemäß konfiguriert ist, zeigt es symbolische Namen aus den Symboldateien für Adressen an, die in der Aufzeichnung gefunden werden.

Um Symbole zu entschlüsseln, müssen die Tools die Programmdatenbank(PDB)-Dateien suchen, die auch als Symboldateien bezeichnet werden, um vollständige Aufrufstapel zu erstellen. Der Compiler und Linker generieren PDB-Dateien, wenn das System eine Komponente erstellt. Microsoft stellt die Programmdatenbank-Dateien für viele Microsoft-Produkte auf einem Onlinesymbolserver bereit. Die Microsoft-Debugtools für Windows und WPA verwenden den Onlinesymbolserver, um Symbolinformationen nachzuschlagen. Daher muss der Computer mit dem Internet verbunden sein, wenn die Symboldateien nicht lokal kopiert werden. Das Windows Performance Toolkit verwendet die gleiche Symboldecodierungsinfrastruktur wie der Windows-Debugger namens Windbg.exe. Weitere Informationen finden Sie unter WinDbg.

Um die Symbolunterstützung zu konfigurieren, müssen Sie die Umgebungsvariable _NT_SYMBOL_PATH definieren. Im folgenden Beispiel wird der Symbolpfad festgelegt, um den öffentlichen Microsoft-Symbolserver zusammen mit einem nachgelagerten Speicher in C:\Symbols zu verwenden:

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

Beachten Sie, dass es sich bei diesem Beispiel um eine einzelne Befehlszeile handelt.

Die URL in diesem Symbolpfad gibt den Online-Microsoft-Symbolserver an. Der Pfad zwischen den Sternchen (C:\symbols) gibt den nachgelagerten Speicher an. Dies ist ein lokaler Cache, in dem das Symbolauflösungssystem Symboldateien vorhält. WPA-Tools decodieren Symbole auch aus Komponenten, die Sie entwickeln. Fügen Sie eine oder mehrere Pfade zu _NT_SYMBOL_PATH hinzu, die die PDB-Dateien für die Komponenten enthalten, die Sie aufzeichnen möchten. Im folgenden Beispiel wird beispielsweise gezeigt, wie der Pfad für das vorherige Beispiel eingerichtet wurde:

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

Wenn Xperf oder WPA Symbole decodiert, wird eine komprimierte Version der ursprünglichen Symboldateien oder PDBs auf dem Datenträger im Verzeichnis \symcache zwischengespeichert. Dazu verwendet Xperf oder WPA die Symbole, die zur Zeit verfügbar sind. Die Betriebssystemsymbole, die von anderen Quellen als Microsoft verfügbar sind, sind öffentliche Symbole. Diese Symbole enthalten weniger Informationen als interne private Symbole. Im Black-Box-Test können öffentliche Symbole auch falsche Informationen enthalten. Private Symbole sind zuverlässiger. Um sie zu erhalten, müssen Sie einer Geheimhaltungsvereinbarung zustimmen. Wenn ein Benutzer eine Aufzeichnung mithilfe öffentlicher Symbole decodiert hat und er dann private Symbole erhält, muss er das Verzeichnis \symcache löschen, bevor Xperf oder WPA die neuen privaten Symbole entdecken können.

Problembehandlung bei der Symboldecodierung

Die Unterstützung von Symboldecodierung ist komplex. Die folgenden Anforderungen müssen erfüllt werden:

  • Sie müssen in der Xperf-Befehlszeile -symbols angeben oder Symbole laden im Menü Ablaufverfolgung in WPA auswählen, nachdem Sie eine Aufzeichnung geöffnet haben.

  • Die Umgebungsvariablen müssen ordnungsgemäß konfiguriert werden. Weitere Informationen zu Xperf finden Sie unter Symbole.

  • Die ETW-Kernelaufzeichnungsdatei muss beendet und ordnungsgemäß zusammengeführt worden sein. Weitere Informationen finden Sie unter Beenden einer Aufzeichnung.

  • Windows Performance Recorder (WPR) oder WPA führt die ETW-Benutzeraufzeichnungsdatei mit einer Kernelaufzeichnungsdatei zusammen, die gleichzeitig auf demselben Computer erfasst wird.

  • Sie müssen Zugriff auf die Binärdatei- und Symbolquellen haben, die _NT_SYMBOL_PATH angibt. Wenn Sie einen Symbolserver verwenden, ist dieser häufig nur ein Redirector. In diesem Fall müssen Sie Zugriff auf den Symbolserver und die Websites haben, auf die der Symbolserver verweist und auf denen die Binärdateien und Symbole gehostet werden.

  • _NT_SYMBOL_PATH muss auf die richtigen Dateien verweisen. Wenn es sich um Dateien eines anderen Builds oder einer anderen Architektur handelt, funktionieren sie nicht. Wenn die Version der Anwendungs-Binärdateien nicht den Symbolen entspricht, auf die _NT_SYMBOL_PATH verweist, können Sie keine Aufrufstapel anzeigen.

    Verwenden Sie Symchk.exe aus der Debuggingtools für Windows-Distribution, um sicherzustellen, dass die Symbole den Symboldateien auf dem Computer entsprechen, auf dem die Aufzeichnung aufgenommen wurde. Zum Beispiel:

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

    Verwenden Sie den fc /b-Befehl, um sich zu vergewissern, dass die Binärdateien auf dem aufzeichnenden Computer und dem Server übereinstimmen. Zum Beispiel:

    fc /b <local_file> <drop_share_file>
    
  • In Xperf müssen Sie die ETW-Kernelaufzeichnung mindestens mit den PROC_THREAD+LOADER Flags erfassen. Diese Flags bieten grundlegende Informationen zu Prozesslebensdauer und virtuellen Adressbereichen im Prozessspeicher. Diese Informationen helfen XPerf, virtuelle Adressen zu Bildern und Symbolen zu decodieren.

    Um zu überprüfen, ob diese Flags in der ETW-Kernelaufzeichnung aktiviert wurden, überprüfen Sie, ob Xperf -process-Ereignisse (Create, Delete, Start Rundown, End Rundown) und Image-Ereignisse (Load, Unload, Start Rundown, End Rundown) in der Tabelle vorhanden sind, die mithilfe des folgenden Befehls generiert wird:

    xperf -i kernel.etl -a tracestats -detail
    

    Hinweis Alle diese Ereignisse werden möglicherweise nicht in der Tabelle aufgeführt, je nachdem, ob sie aufgetreten sind.

Beschränkung der Xperf-Symboldecodierung

Wenn kein Laufwerk mit einem ausführbaren Image angegeben wird, verwendet Xperf standardmäßig das Systemlaufwerk (z. B. \Path\Library.dll). Wenn Xperf bei Ausführung des Befehls -d/-merge kein ausführbares Image finden kann, das während der Aufzeichnung in einem laufenden Prozess existiert hat, kann Xperf die entsprechenden Image- und Symboldatei-Identitätsinformationen nicht abrufen und die Informationen zur zusammengeführten Aufzeichnung hinzufügen. Ohne diese Informationen kann Xperf in der entsprechenden Aufzeichnung keine Symboldecodierung für dieses Image ausführen.

Dieses Problem wirkt sich nicht auf andere Dateipfade aus, z. B. die Pfade in Datenträger-E/A oder Datei-E/A.

Zwecks Symboldecodierung und Verwendung der richtigen Image-Lade- und -Entladepfade in Xperf-ETW-Aufzeichnungen sollten Sie alle ausführbaren Images aufbewahren, für die Sie möglicherweise Symboldecodierung oder Image-Lade- und -Entladepfade auf dem Systemlaufwerk benötigen. Führen Sie in dem Fall die Images von diesem Laufwerk aus. Wenn dies nicht möglich ist, erstellen Sie eine Kopie der Bilder auf dem Systemlaufwerk, auch wenn Sie die Images aus einem anderen Laufwerk ausführen. Wenn z. B. Ihr Systemlaufwerk „C: “ ist, erstellen Sie eine identische Kopie von D:\game\bin\binkw32.dll unter C:\game\bin\binkw32.dll.

Windows Performance Toolkit

symbols

Verwenden von PDB-Dateien mit der NGEN-Unterstützung von CLR 4.0

Allgemeine Probleme bei der ausführlichen Analyse