Impossibile caricare SOS in WinDbg


132

Background: sono nuovo su WinDbg e sto provando a farlo funzionare per la prima volta. Voglio esaminare un dump della memoria che ho preso da un sito ASP.NET 4 in esecuzione ospitato in IIS 7 su Windows Server 2008 (x86) e scaricato sul mio computer locale.

Ho installato gli strumenti di debug e lanciato WinDbg per la prima volta, aprendo il dump dell'arresto anomalo. Sono andato a File | Percorso file simboli e imposta il percorso *srv*c:\symbols*http://msdl.microsoft.com/download/symbols*e atteso il caricamento di tutti i simboli.

Durante il tentativo di caricare SOS, ho riscontrato problemi. Innanzitutto, ho provato il seguente comando ...

.loadby sos mscorwks

... e ha ricevuto la risposta Unable to find module 'mscorwks'.

Dopo aver cercato il Web, ho provato a caricare mscorwks eseguendo il comando seguente ...

sxe ld mscorwks.dll
g

... e ha ricevuto la risposta "Nessun errore di debuggees eseguibile in 'g'"

Ho copiato SOS.dll (da C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319) nella directory WinDbg, quindi ho provato ...

.load sos

... e ha ricevuto l'errore ...

The call to LoadLibrary(sos) failed, Win32 error 0n193
    "%1 is not a valid Win32 application."
Please check your debugger configuration and/or network access.

Non sono sicuro di come procedere. Voglio solo caricare SOS e scavare in questo file di dump. Qualsiasi aiuto sarebbe molto apprezzato.

Fyi ... Sto provando ad aprire il file di dump su una versione a 64 bit di Windows 7 con la versione a 64 bit di Windbg.

Risposte:


203

La dll di runtime CLR è stata rinominata clr.dllcon .NET 4. Pertanto, per caricare la versione corretta di SOS è necessario modificare il .loadbycomando. ie

.loadby sos clr

Inoltre, se si è a 64 bit, è necessario installare anche la versione a 32 bit degli strumenti di debug per Windows per eseguire il debug delle app a 32 bit. Si installano fianco a fianco, quindi non c'è problema ad avere sia la versione a 32 bit che quella a 64 bit sulla stessa macchina.

Vorrei sconsigliare la copia di SOS.dll. SOS deve corrispondere alla versione esatta del framework, quindi finché lo carichi dalla directory del framework utilizzando .loadby, sei pronto.


Trovo difficile ottenere entrambi sul mio sistema, poiché gli ultimi installatori rilevano automaticamente il tipo di CPU. Esiste un flag di override che conosci per l'MSI? Ho intenzione di installare una vecchia versione a 32 bit di WinDbg, ma non so cosa aspettarmi.
Dave,

5
@Dave: forse troppo tardi o troppo tardi, ma per la pagina web di installazione che trovi qui: msdn.microsoft.com/en-us/windows/hardware/gg463009.aspx puoi scegliere di installare i pacchetti ridistribuibili che inseriscono MSIs per ogni versione di architettura : C: \ Programmi \ Microsoft SDKs \ Windows \ v7.1 \ Redist \ Debugging Tools for Windows
Aaron Lerch,

Se dico di .loadby sos clravere Unable to find module 'clr'. Sto cercando di eseguire il debug di .NET 4 con WinDbg x64
Csaba Toth il

2
@CsabaToth è una discarica o stai eseguendo il debug live? Se stai eseguendo il debug live, il CLR potrebbe non essere stato ancora caricato. Puoi fare sxe ld clrper interrompere quando il CLR è stato caricato e quindi puoi caricare SOS a quel punto.
Brian Rasmussen,

@BrianRasmussen È un eseguibile compilato. Se do un'occhiata alla finestra dei moduli, la clr carica.
Csaba Toth,

18

Il comando WinDbg 'g' significa [Continua]

Dato che stai aprendo un dump-file non c'è modo di 'continuare', contiene solo la memoria di processo.

Quindi il messaggio "Nessun errore di debuggees eseguibile in 'g'" è logico nel tuo caso poiché il processo non è in esecuzione .

Per quanto riguarda il caricamento della versione corretta di SOS, utilizzare il comando seguente in base alla versione .NET.

.NET 4 e versioni successive .loadby sos

.NET 3.5 e 2 .loadby sos mscorwks

.NET 1.0 e 1.1 .load clr10 \ sos


1

Le risposte sopra devono essere migliorate, poiché nel corso del tempo le cose sono state più facili da gestire con il caricamento di sos.

JOHN ROBBINS ha un bell'articolo , vedi che i server dei simboli Microsoft sono configurati nel percorso del file dei simboli ed eseguono! Analizza -v al prompt windbg, questo farà il trucco che scaricherà i file sos rilevanti. Per verificare esegui .chain sul prompt e vedrai la dll caricata.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.