debugging - msdl - windbg download symbols from microsoft



WinDbg risoluzione dei simboli (3)

Quando si utilizza WinDbg, dove dovrebbero essere collocati i file di simboli privati ​​(pdb?)?

La mia situazione è: ho una DLL che voglio eseguire il debug. Ho il codice sorgente e i file di simboli per questa DLL. Questa DLL è chiamata da un'altra DLL (che non ho simboli o fonte per) che, a sua volta, è chiamata da un EXE (che anch'io non ho simboli o fonte per).

Il mio problema è che sto ricevendo un avviso che dice

*** ATTENZIONE: impossibile verificare il checksum per C: \ TheProgram \ SomeSubfolder \ AnotherSubfolder \ MyDll.dll

Questo avviso penso sia la ragione per cui sto ricevendo il seguente tipo di messaggi nello stack delle chiamate:

MyDll! AClass :: AFunction + SomeHexAddress

La mia struttura di file è simile a questa:

L'exe: C: \ TheProgram \ program.exe

La chiamata dll: C \ TheProgram \ SomeSubfolder \ caller. ???

La mia DLL che voglio eseguire il debug: C: \ TheProgram \ SomeSubfolder \ AnotherSubfolder \ MyDll.dll

Nota: ho impostato il percorso del file simbolo e il percorso del file di origine in cui è stata generata la DLL di debug, nel mio spazio di lavoro su un'unità diversa dall'exe. Ma ho copiato i file di mappa pdb + e inserito nella DLL che volevo per eseguire il debug di ..

https://src-bin.com


Answer #1

Come parte del nostro processo di compilazione, copiamo i file PDB privati ​​ei file EXE / DLL rilasciati su un server di simboli. Nel modo più semplice, questo è solo un percorso UNC, ma è possibile configurarlo per l'accesso tramite HTTP.

Per copiare i file di output, utilizzare il programma SYMSTORE.EXE.

Quindi, configura il tuo debugger (usiamo Visual Studio e WinDbg) per cercare in quel percorso. Per WinDbg, il modo più semplice per farlo è impostare una variabile d'ambiente:

_NT_SYMBOL_PATH=
    SRV*C:\WebSymbols*http://msdl.microsoft.com/download/symbols;
    \\symsvr\Symbols

(che dovrebbero essere tutti su una riga)

Ciò configura WinDbg per cercare su Microsoft Symbol Server (memorizzando nella cache i file in C: \ WebSymbols) e anche per cercare in un archivio simboli locale ( \\symsvr\Symbols ).

Usiamo anche gli strumenti del server di origine per memorizzare i dettagli SVN nel file PDB, il che significa che possiamo tornare al file sorgente esatto usato per costruire una particolare versione. Cerca in ...\Debugging Tools for Windows (x86)\srcsrv .


Answer #2

Non importa dove si mettono i file dei simboli privati ​​finché si è in grado di dire al debugger dove si trovano.

L'avviso che stai visualizzando non ha alcun effetto sullo stack trace, ma il fatto che manchi i simboli per caller.DLL e app.EXE lo fa .

La configurazione dei simboli in windbg (localmente) è semplice come usare:

.sympath [+] path_to_pdbs
*e
.symfix + path_to_system_pdb_store

Stai vedendo:

MyDll! AClass :: AFunction + SomeHexAddress
in realtà non significa nulla finché SomeHexAddress è ragionevole (e ammesso che MyDll.pdb sia stato trovato e caricato!) - sembra una vera e propria entry stack entry.

Ora, la mia domanda sarebbe, qual è il problema con cui sei bloccato?

PS non hai bisogno del file .map con windbg.


Answer #3

Un'opzione è di lasciare i file dei simboli dove sono ( cioè nella cartella di output della build ) e quindi usare l'opzione della riga di comando -y WinDbg per localizzare questi file. L'utilizzo di questo approccio dovrebbe garantire che i file dei simboli siano sempre aggiornati.

Dalla Guida Microsoft:

-y SymbolPath 
Specifies the symbol search path. Separate multiple paths with a 
semicolon (;). If the path contains spaces, it should be enclosed 
in quotation marks. For details, and for other ways to change this 
path, see Symbol Path. 




symbols