Come si identificano (e si accede a) moduli / simboli di debug da utilizzare quando viene fornito un Windows .dmp o .minidmp
Domanda
In un modo che segue da leggere un file Windows * .dmp
Dopo aver ricevuto un file di dump da un cliente casuale, eseguendo la sessione di debug per vedere l'arresto anomalo, spesso si trova in una libreria MS o di terze parti. Il prossimo problema è che potresti non essere a conoscenza della configurazione del PC a tal punto da assicurarti di avere i moduli effettivamente disponibili.
Ad esempio, al momento sono bloccato nel tentativo di ottenere i simboli da caricare per ntdll.dll (5.01.2600.5512). In MSVC 2005 la colonna del percorso nella finestra dell'elenco dei moduli mostra un * prima del nome file completo e rifiuta di caricare i simboli che ho scaricato per XP / SP1 / SP1a / SP2 / SP3.
Ho il server dei simboli configurato per il download da Internet e l'archiviazione in una cache locale che sembra funzionare bene per i moduli che ho sul mio PC. Utilizzo della GUI equondante al metodo
Set _NT_SYMBOL_PATH=srv*d:\SymbolCache*\\server1\Third-Party-PDB;srv*d:\SymbolCache*\\server2\Windows\Symbols*http://msdl.microsoft.com/download/symbols
Forse ho i simboli sbagliati, ma poiché quelli nuovi non vengono scaricati, dove posso andare dopo? Devo contattare il cliente e chiedere quale SP ha installato e eventuali altre patch? Devo installare quella macchina e quindi eseguire il debugger con il file dmp per ottenere i simboli di cui ho bisogno?
Soluzione
Cosa stai usando per eseguire il debug del minidump? Ad esempio, WinDBG o Visual Studio? E come è stato generato il minidump?
Dovrebbero esserci abbastanza informazioni nel minidump per risolvere correttamente i simboli di dll di sistema. Stai utilizzando un download locale di simboli o http://msdl.microsoft.com/ ?
Aggiornamento: dovresti essere in grado di aggiungere l'archivio pubblico di simboli Microsoft a Tools- > Options- > Debugging- > Symbols- > Symbol file (.pdb), quindi caricare manualmente i simboli facendo clic con il tasto destro sul modulo nella finestra Moduli e caricandoli se non viene eseguito automaticamente.
È anche probabile (probabilmente) che VS 2005 non guardi _NT_SYMBOL_PATH
per risolvere i simboli di minidump.
Altri suggerimenti
Se si utilizza WinDbg (parte degli Strumenti di debug per Windows ), quindi è semplice avere automaticamente i simboli giusti per te da Microsoft. Configura il percorso del simbolo usando " .symfix " (o " .symfix + " ;, per semplicemente aggiungere il comando al percorso di ricerca dei simboli esistente).
Una volta che hai fatto ciò e hai il dump dell'arresto anomalo caricato in WinDbg, digita " .reload / f " per far sì che WinDbg ricarichi i simboli. Utilizzerà le informazioni all'interno del file di dump stesso per estrarre i simboli corretti dal server dei simboli pubblici di Microsoft, indipendentemente dalle DLL presenti sul computer.
Se per qualche motivo i simboli non si caricano correttamente dopo averlo fatto, inserisci "! sym noisy " nella finestra di comando di WinDbg e ricaricare nuovamente i simboli. Mentre WinDbg tenta di caricarli, vedrai che vengono generati eventuali errori riscontrati nel processo di ricerca / caricamento. Questi messaggi di errore ti aiuteranno a diagnosticare ulteriormente cosa non va e perché non vengono caricati i simboli corretti.
Questo post contiene informazioni che potrebbero anche essere utile.
Se stai digitando " Imposta _NT_SYMBOL_PATH = srv ...
" in un prompt dei comandi, ci sono due cose da considerare:
-
Il comando
- È necessario avviare il debugger come figlio del prompt dei comandi. Tuttavia, non è necessario eseguire questa operazione se si utilizza il Pannello di controllo per impostare variabili di ambiente persistenti o se si utilizza il comando
setx
(in Windows Vista o uno dei kit di risorse di Windows).
cmd.exe
set
non ignora gli spazi bianchi, quindi definisce una variabile chiamata " _NT_SYMBOL_PATH
" ;, non " ; _NT_SYMBOL_PATH
".
Se stai impostando il percorso del simbolo in un altro modo, questo non si applica.
Prova a seguire le istruzioni in questo articolo kb e assicurati che il percorso del tuo simbolo sia configurato correttamente, quel WinDbg ha accesso ad esso e che i simboli ntdll (ad esempio) vengono effettivamente scaricati nella cache dei simboli. L'articolo fornisce anche istruzioni su come scaricare e verificare manualmente i simboli nella cache tramite lo strumento SymChk.