2009-06-08 4 views
26

Sto cercando di utilizzare windbg di più e continuo ad avere problemi con la cache dei simboli. Non mi è chiaro quale sia il formato della stringa._NT_SYMBOL_PATH format

Ho un paio di requisiti:

L'archivio di simboli dal nostro build distribuito su \\ foo \ Build1234 non è organizzato come server di simboli. Se ho capito bene, ho bisogno di usare la parola chiave cache.

Alla luce di questi requisiti, Ti sembra uno srvpath formattato correttamente:

cache*\\foo\Build1234;srv*c:\dev\symbols*http://msdl.microsoft.com/download/symbols 

Edit:

Ho appena iniziato a leggere Advanced Windows Debugging e avevo frainteso come funziona la parola chiave della cache. Ho pensato che fosse un modo per dire al debugger che la cartella è solo una cartella di file e non un server di simboli. Dopo che Michael ha lasciato il suo commento, ho riletto la sezione e ho visto che funziona davvero come descritto da Michael.

Ora sono confuso da quando si utilizza a; oppure a * per separare percorsi/URL. E quando hai bisogno del prefisso srv *. Nella guida in linea per windbg danno questo esempio:

\\someshare\that\cachestar\ignores;srv*c:\mysymbols*http://msdl.microsoft.com/download/symbols;cache*c:\mysymbols;\\anothershare\that\gets\cached 

I simboli da \\ someshare non vengono memorizzati nella cache, i simboli da Microsoft vengono memorizzate nella cache in c: \ mysymbols, e c: \ mysymbols viene utilizzato come cache per qualsiasi altro percorso a destra della direttiva cache *.

L'uso occasionale di srv * mi confonde: non capisco perché il primo e l'ultimo percorso non siano preceduti da srv *.

Edit 2:

Questo sta lentamente iniziando ad avere un senso per me. La direttiva srv viene utilizzata per i server di simboli e non per le normali directory di simboli. Quindi, credo che la risposta alla mia domanda originale è questo:

\\foo\Build1234;cache*c:\dev\symbols;srv*http://msdl.microsoft.com/download/symbols 
+1

correlati: [Come impostare i simboli in WinDbg] (https://stackoverflow.com/questions/30019889/how-to-set-up-symbols-in-windbg) –

risposta

33
SRV*C:\dev\symbols*http://msdl.microsoft.com/download/symbols;\\foo\build1234 

dovrebbe funzionare bene, se \\foo\build1234 è solo piatta PPB di. La cache non è necessaria qui; hai solo bisogno di aggiungere la directory al tuo percorso simbolico.

La parola chiave della cache specifica dove si desidera memorizzare nella cache i file di simboli, ed è utile per i simboli di caching a livello locale da azioni non indicizzati (come \\foo\build1234)

cache*C:\dev\symbols;SRV*C:\dev\symbols*http://msdl.microsoft.com/download/symbols;\\foo\build1234 

Il percorso di cui sopra sarebbe memorizzare i simboli dal server di simboli di MS e il tuo simbolo condivide con la tua macchina locale in C: \ dev \ symbols.

Per questioni di simboli di debug utilizzando windbg, fare

!sym noisy 
.reload <some exe or DLL in your session> 

e poi fare qualche azione che costringerebbe il PPB da caricare. Vedrai dove windbg sta cercando i file e se rifiuta un PDB perché lo ha fatto.

!sym quiet 

Sopprime quindi i messaggi di errore.

+0

Quando avere il simbolo problemi, uso sempre ".reload -f -a" dopo aver attivato carichi rumorosi. – LanceSc

+0

Grazie Michael. La tua risposta è corretta Ciò che ho finito per fare è leggermente diverso. Ho inserito \\\ foo \ build1234 all'inizio del percorso in modo che non venga mai memorizzato nella cache, specificato la mia cache globale che desidero utilizzare per tutto, quindi aggiunto l'URL di Microsoft. In questo modo, eventuali percorsi aggiuntivi che aggiungo durante il debug useranno la mia cache globale, che è il modo in cui voglio che questo si comporti. Grazie. – criddell