2012-10-29 20 views
7

Ho passato da poco dalla programmazione nativa a quella gestita. Sto usando .NET.Passaggio del codice sorgente utilizzando l'estensione SOS Windbg

Dal momento che ho usato Windbg per un bel po 'di tempo, voglio usarlo per il debug di codice gestito come bene.

La mia ricerca mi ha portato alla SOS (figlio di sciopero) estensione, che sembra avere abbastanza alcuni comandi potenti.

Anche se capisco la maggior parte dei comandi utilizzati in SOS, non riesco a trovare un modo per scorrere correttamente il codice sorgente, proprio come potrei fare usando le istruzioni p e t per il codice nativo.

Questo rende l'esperienza di debug difficile, e voglio davvero fare un passo attraverso il codice durante il debug di esso.

Ho cercato un po 'su questo e ho scoperto che ciò era possibile utilizzando la versione 6.7.05.0 di Windbg in cui MS sembrava aver rilasciato il debug integrato gestito, ma si è ritirato nelle versioni successive.

Tuttavia, io sono molto interessato a essere in grado di eseguire il codice "fonte" dal vivo durante il debug attraverso SOS. Specialmente perché sta davvero ostacolando la mia esperienza di debug in questo momento.

C'è un modo per raggiungere questo obiettivo?

Qualsiasi aiuto su come fare questo (o soluzioni alternative pratiche) è apprezzato.

risposta

6

Windbg si illumina all'analisi dei minidump di un processo arrestato. Tuttavia non è un debugger gestito.

Si può avere la botte piena e la moglie ubriaca caricando SOS in Visual Studio. Che consente di utilizzare i normali strumenti di debug disponibili nel debugger gestito, oltre alla diagnostica che è possibile ottenere da SOS. applicare alcune restrizioni:

  • È necessario attivare il debug non gestito, Progetto + Proprietà, scheda Debug, selezionare l'opzione
  • VS è un processo a 32 bit in modo da poter utilizzare solo la versione a 32 bit di SOS. Progetto + Proprietà, scheda Crea, assicurati di aver selezionato x86 se stai utilizzando la versione a 64 bit di Windows.

Avviare il debug e passare a Windows Immediata. Digitare .load sos.dll, si dovrebbe vedere un messaggio come extension C:\Windows\Microsoft.NET\Framework\v4.0.30319\sos.dll loaded. Digitare! Help e verificare che vengano visualizzati i comandi SOS elencati.

5

Provare a usare! Sosex.mt e! Sosex.mgu. Il comando 'p' dovrebbe funzionare come pubblicizzato.

+1

Ehi Steve, è bello avere una risposta dallo sviluppatore di SOSEX stesso ..!Il mio obiettivo principale qui è quello di assicurarmi che mentre passo attraverso il codice, posso vedere la corretta riga di codice evidenziata nel debugger. Anche se non sono in grado di farlo con SOS, e da te rispondo capisco che "! Sosex.mt" e "! Sosex.mgu" sarebbero equivalenti di t e gu per il codice nativo. Ma l'esecuzione di questi comandi evidenzia anche le linee di codice corrispondenti nella finestra sorgente? Grazie ancora per la tua risposta! – Dev28

+2

È possibile che nelle versioni successive di WinDbg la sincronizzazione dell'origine non funzioni correttamente. Sfortunatamente, non ho il controllo su quella parte. Tuttavia, se si utilizza l'estensione! Muf, è possibile sincronizzarsi abbastanza bene con il codice sorgente. Non è bello come l'evidenziazione nella finestra del codice, ma funziona. –

+0

Grazie Steve. Sarebbe d'aiuto se potessi quantificare quali sarebbero esattamente le "versioni successive di WinDbg"? – Dev28

0

Se quello che vuoi è quello di hookup codice sorgente per windbg si potrebbe seguire questi passaggi:

  1. Vai a file-> percorso di origine del file, la selezione della cartella con i file di origine.
  2. Vai a View-> Call Stack, si aprirà una nuova finestra.
  3. Navigare nello stack di chiamate e fare clic sulla voce corrispondente, si aprirà una finestra con il browser del codice.