Ottieni i simboli nativi .net nativi per Windbg

Sto facendo un po ‘di debug di crash dump, dove sto cercando un dump preso da un server di produzione. Il computer su cui sto eseguendo WinDbg deve avere una versione leggermente diversa del runtime .NET installato. Ricevo errori durante il caricamento delle immagini native degli assembly di sistema .NET (quindi non è ansible caricare ad esempio System.Data.Linq ) .

Qual è il modo migliore per garantire che la mia macchina di debug abbia accesso a tutti i simboli giusti?

Modifica Aggiunto output di lmv per Thomas Weller

 000007fb`68660000 000007fb`68993000 System_Data_Linq_ni C (pdb symbols) C:\Program Files\Debugging Tools for Windows (x64)\sym\System.Data.Linq.pdb\703A918D116A4558BB44245924371ACD1\System.Data.Linq.pdb Loaded symbol image file: System.Data.Linq.ni.dll Image path: C:\Windows\assembly\NativeImages_v4.0.30319_64\System.Data.Linq\acbd568cd3c2499fbb7b2639c4a46a81\System.Data.Linq.ni.dll Image name: System.Data.Linq.ni.dll Has CLR image header, track-debug-data flag not set Timestamp: Fri Apr 11 20:41:26 2014 (534899C6) CheckSum: 00000000 ImageSize: 00333000 File version: 4.0.30319.34209 Product version: 4.0.30319.34209 File flags: 0 (Mask 3F) File OS: 4 Unknown Win32 File type: 2.0 Dll File date: 00000000.00000000 Translations: 0000.04b0 0000.04e4 0409.04b0 0409.04e4 

il ni nel nome indica che questa è una versione nativa (ottimizzata per ngen) che differisce da macchina a macchina. Devi creare il PDB sulla macchina in cui hai ottenuto il dmp con ngen:

 ngen createpdb C:\Windows\assembly\NativeImages_v4.0.30319_32\System.Data.Linq\ f989891b3a507d4aaec44ab1df12e9d5\System.Data.Linq.ni.dll c:\symbols /debug 

Ora aggiungi i PDB dai simboli C: \ al percorso dei simboli di Windbgs.

Ci sono alcune cose da considerare per .NET:

  1. Assicurati di avere un buon dump per .NET , ovvero 64 bit di processo a 64 bit o dump a 32 bit del processo a 32 bit. Se lm m wow64 mostra un modulo, non è una discarica “buona”.
  2. Imposta i simboli , almeno .symfix c:\symbols e .reload
  3. Ottenere i file di debug .NET (SOS.dll e mscordacwks.dll) dal PC originale e rinominarli di conseguenza. Vedi i dettagli in un’altra risposta .

    Il mio strumento gratuito Mscordacwks Collector lo farà per te, inclusa la ridenominazione.

    Se quel PC non è più disponibile, potresti voler cercare quei file nei miei archivi mscordacwks e SOS

    Disclaimer: sono l’autore di quelli, se non fosse abbastanza chiaro.

È ansible scaricare WINDBG dai simboli ufficiali dai server Microsoft eseguendo il seguente comando:

 .sympath srv*c:\symbols*http://msdl.microsoft.com/download/symbols .reload /f 

Questo memorizzerà i simboli scaricati dal server in una cache locale in C:\Symbols e quindi imporrà un ricaricamento dei simboli per tutti i moduli attualmente caricati.