2016-06-28 22 views
8

Il documentation dice:La documentazione per WinDbg SRV * è errata?

Se si include la stringa srv * nel vostro percorso di simboli, il debugger utilizza un server di simboli per ottenere i simboli dal negozio simbolo di default. Per l'esempio , il seguente comando indica al debugger di utilizzare un server simbolo per ottenere simboli dall'archivio dei simboli predefinito. Questi simboli sono non memorizzati nella cache del computer locale.

.sympath SRV *

Tuttavia quello che ho trovato è simboli sono cache.

Sto usando WinDbg 10 ed i file di cache di default sembrano essere creato il C:\Program Files (x86)\Windows Kits\10\Debuggers\x86\sym Quando elimino loro e eseguire un file eseguibile con il percorso impostato srv* i simboli vengono scaricati qui.

Quindi la documentazione è errata?

+0

Almeno la tua interpretazione è stato dimostrato sbagliato da voi. –

risposta

5

Sì, la documentazione è errata (almeno per WinDbg 6.2.9200.16384).

È possibile dimostrarlo inserendo il comando menzionato:

0:000> .sympath srv* 
Symbol search path is: srv* 
Expanded Symbol search path is: cache*;SRV*http://msdl.microsoft.com/download/symbols 

Quindi, come possiamo vedere dalla uscita del WinDbg, il percorso di simboli espanso (che saranno effettivamente utilizzato) contiene cache* che indica che i simboli verrà memorizzato nella cache.

È stato trovato nel numero documentation for WinDbg, che potrebbe non essere la posizione corretta per definire il comportamento, poiché WinDbg non carica i simboli stessi. Invece usa dbghelp.dll e il comportamento di quella DLL potrebbe cambiare senza che l'aiuto di WinDbg venga aggiornato.


La sintassi percorso di simboli è davvero difficile abituarsi e la documentazione è diffuso in tutto il luogo. Tutta la magia con l'espansione e le directory predefinite lo rendono ancora peggiore.

il flusso è più o meno:

  1. Spalato il percorso di simboli a ";" nella matrice elementi.
  2. Per ciascun elemento in elementi:
    1. di manovra secondo l'inizio della dell'elemento:
      1. "cache *":
        1. Determinare percorso della cache:
          1. Se c'è un il percorso dopo l'asterisco usa quel percorso.
            Altrimenti utilizzare il percorso di cache predefinito.
          2. Simbolo di cache da tutti i seguenti elemento s in questo percorso.
      2. "symsrv *":
        1. Split elemento a componenti "*" in (per lo più percorso).
        2. Il primo componente è la DLL del server dei simboli da utilizzare.
        3. I componenti successivi sono percorsi. Per ogni percorso :
          1. Cercare simbolo nella percorso. Il percorso può essere uno di
            • Directory locale.
            • UNC.
            • URL HTTP o HTTPS - deve essere l'ultimo percorso.
            • Stringa vuota - indica l'archivio simboli predefinito. (Vedere SymSetHomeDirectory e !homedir.)
          2. Se trovato:
            1. Copia simbolo per tutte precedenti percorso s in questo elemento.
            2. Fine simbolo di ricerca
      3. "SRV *":
        • Uguale a "symsrv * * Symsrv.dll".
      4. Altrimenti:
        1. Trattare l'elementocome percorso e cercare il simbolo lì. (Senza l'hash, ecc. Come fatto da symsrv.dll.)
+0

ha senso, anche questo messaggio 'DBGHELP: Symbol Search Path: cache *; SRV * https: // msdl.microsoft.com/download/symbols' mostra anche' cache' ma quale percorso è espanso in realtà? quindi 'srv *' è una specie di simbolo di percorso speciale stesso? – zar

+0

@zar: vedere la mia risposta aggiornata. Questo aiuta? –

+0

Totalmente d'accordo con "la sintassi del percorso simbolico è davvero difficile abituarsi", è molto confusa e ha troppi significati e variazioni. – zar

1

Se si utilizza lo special cache*path token nel percorso del simbolo WinDbg, WinDbg memorizzerà i simboli in cache dai sorgenti che seguono tale token. È anche possibile scrivere srv*localpath*serverpath per memorizzare i simboli da serverpath a localpath. Se non vuoi la cache, assicurati che il tuo .sympath non lo includa.

Inoltre, potrebbe valerne la pena controllare se i simboli sono effettivamente memorizzati nella cache (recuperati una volta, riutilizzati più volte) o semplicemente memorizzati lì per questa esecuzione di WinDbg (recuperati una volta per sessione).

+0

È essenzialmente memorizzato nella cache, viene recuperato solo una volta e rimane lì per sempre. I successivi '.reloads' sono veloci. Se cancello questo contenuto di una cartella, il '.reload' è più lento quando recupera effettivamente i simboli. – zar