Supporto simboli

Quando Windows analizzatore prestazioni (WPA) è configurato correttamente, WPA mostra i nomi simbolici dei file di simboli per gli indirizzi presenti nella registrazione.

Per decodificare i simboli, gli strumenti devono individuare i file di database del programma, noti come file PDB (Program Database) o file di simboli, per compilare stack di chiamate complete. Il compilatore e il linker generano file PDB quando il sistema compila un componente. Microsoft fornisce i file di database del programma per molti prodotti Microsoft in un server simboli online. Gli strumenti di debug Microsoft per Windows e WPA usano il server simboli online per cercare le informazioni sui simboli. Pertanto, il computer deve essere connesso a Internet se i file di simboli non vengono copiati in locale. Windows Performance Toolkit usa lo stesso infrastruttura di decodifica dei simboli del debugger di Windows, Windbg.exe. Per altre informazioni, vedere WinDbg.

Per configurare il supporto dei simboli, è necessario definire la variabile di ambiente _NT_SYMBOL_PATH . Nell'esempio seguente viene impostato il percorso del simbolo per l'uso del server simbolo pubblico Microsoft insieme a un archivio downstream in C:\symbols:

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

Si noti che questo esempio è una singola riga di comando.

L'URL in questo percorso del simbolo specifica il server di simboli Microsoft online. Il percorso tra gli asterischi (C:\symbols) specifica l'archivio downstream. Si tratta di una cache locale in cui il sistema di risoluzione dei simboli mantiene i file di simboli. Gli strumenti WPA decodificano anche i simboli dai componenti sviluppati. Aggiungere uno o più percorsi a _NT_SYMBOL_PATH che contengono i file PDB per i componenti da registrare. Nell'esempio seguente, ad esempio, viene illustrato come è stato configurato il percorso per l'esempio precedente:

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

Quando Xperf o WPA decodifica i simboli, Xperf o WPA memorizza nella cache una versione condensata dei file di simboli originali o PDB nel disco nella directory \symcache . A tale scopo, Xperf o WPA usa i simboli disponibili al momento. I simboli del sistema operativo disponibili all'esterno di Microsoft sono simboli pubblici. Questi simboli contengono meno informazioni rispetto ai simboli privati interni. Nei test in black-box i simboli pubblici possono includere anche informazioni non corrette. I simboli privati, che sono più affidabili, possono essere ottenuti in contratti di divulgazione non. Se un utente ha decodificato una registrazione usando simboli pubblici e l'utente ottiene simboli privati, l'utente deve cancellare la directory \symcache prima di Xperf o WPA può individuare i nuovi simboli privati.

Risoluzione dei problemi di decodifica dei simboli

Il supporto di decodifica dei simboli è complesso. Devono essere soddisfatti i requisiti seguenti:

  • È necessario specificare -symbols nella riga di comando Xperf o selezionare Carica simboli nel menu Traccia in WPA dopo aver aperto una registrazione.

  • Le variabili di ambiente devono essere configurate correttamente. Per altre informazioni su Xperf, vedere simboli.

  • Il file di registrazione del kernel ETW deve essere stato arrestato e unito correttamente. Per altre informazioni, vedere Arresto di una registrazione.

  • Windows Performance Recorder (WPR) o WPA unisce il file di registrazione utente ETW insieme a un file di registrazione del kernel che viene eseguito contemporaneamente nello stesso computer.

  • È necessario avere accesso alle origini binarie e dei simboli che _NT_SYMBOL_PATH specifica. Se si usa un server di simboli, il server di simboli è spesso un reindirizzamento. In questo caso, è necessario avere accesso sia al server dei simboli che ai siti che il server simboli punta a che ospita i file binari e i simboli.

  • _NT_SYMBOL_PATH deve puntare ai file corretti. Se i file esistono da una compilazione o un'architettura diversa, i file non funzioneranno. Se la versione dei file binari dell'applicazione non è la stessa versione dei simboli a cui _NT_SYMBOL_PATH punta, non è possibile visualizzare stack di chiamate.

    Per escludere la mancata corrispondenza di un simbolo, usare Symchk.exe dagli strumenti di debug per la distribuzione di Windows per assicurarsi che i simboli corrispondano ai file di simboli nel computer in cui è stata eseguita la registrazione. Ad esempio:

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

    Per escludere una mancata corrispondenza binaria, usare il fc /b comando per assicurarsi che i file binari nel computer in cui è stata eseguita la registrazione corrispondano ai file binari nella condivisione di rilascio. Ad esempio:

    fc /b <local_file> <drop_share_file>
    
  • In Xperf è necessario acquisire la registrazione del kernel ETW usando almeno i PROC_THREAD+LOADER flag. Questi flag forniscono informazioni di base sulla durata del processo e sugli intervalli di indirizzi virtuali dell'immagine nella memoria del processo. Queste informazioni consentono a XPerf di decodificare gli indirizzi virtuali alle immagini e ai simboli.

    Per verificare che questi flag siano stati abilitati nella registrazione del kernel ETW, verificare che gli eventi Xperf -process (Create, Delete, Start Rundown, End Rundown) e Image (Load, Unload, Start Rundown, End Rundown) siano presenti nella tabella generata tramite il comando seguente:

    xperf -i kernel.etl -a tracestats -detail
    

    Nota Tutti questi eventi potrebbero non essere elencati nella tabella, a seconda che questi eventi si siano verificati.

Limitazione nella decodifica dei simboli Xperf

Xperf viene predefinito nell'unità di sistema se un'unità non è specificata per un'immagine eseguibile , ad esempio \Path\Library.dll. Quando si esegue il -d/-merge comando, se Xperf non riesce a trovare un'immagine eseguibile presente in un processo in esecuzione durante la registrazione, Xperf non può recuperare le informazioni relative all'identità del file di immagine e simbolo corrispondente e aggiungere le informazioni alla registrazione unita. Senza queste informazioni, Xperf non può eseguire la decodifica dei simboli per tale immagine in tale registrazione.

Questo problema non influisce su altri percorsi di file, ad esempio i percorsi nel disco di I/O o file I/O.

Per abilitare la decodifica dei simboli e per abilitare il caricamento e il caricamento corretto delle immagini nelle registrazioni ETW di Xperf, è consigliabile archiviare tutte le immagini eseguibili per cui è possibile richiedere la decodifica dei simboli o il caricamento di immagini e scaricare i percorsi nell'unità di sistema. Eseguire quindi le immagini da tale unità. Se non è possibile, creare un mirroring delle immagini nell'unità di sistema, anche se si eseguono le immagini da un'altra unità. Ad esempio, se C: è l'unità di sistema, creare una copia identica di D:\game\bin\binkw32.dll in C:\game\bin\binkw32.dll.

Windows Performance Toolkit

Simboli

Uso del supporto PDB di CLR 4.0

Problemi comuni di analisi In-Depth