2012-05-09 7 views
11

Stiamo provando ad analizzare un dump di memoria w3wp utilizzando windbg e abbiamo rilevato che il processo w3wp si arresta in modo anomalo a causa dello stack overflow. Ho caricato psscor4.dll e ottenuto lo stack di chiamate emettendo! Clrstack. Ma voglio anche sapere che i parametri vengono passati ai metodi. Se si immette "! Clrstack -p" o "! Clrstack -a", si ottiene < senza dati > per tutti i parametri e le variabili locali. Qualche idea, perché stiamo ottenendo < nessun dato > invece dei valori attuali per i parametri e le variabili locali?! Clrstack -p non fornisce i valori dei parametri per i metodi nello stack di chiamate

+0

Penso di aver capito, fino al punto in cui si pone la domanda, "Qualche idea, perché stiamo ottenendo invece dei valori effettivi per i parametri e le variabili locali?" Puoi riformulare? –

+0

@dtryon, ho aggiornato la domanda ora. Grazie per segnalarlo. – arul

risposta

9

Se si sta eseguendo una versione di rilascio, in genere non sarà possibile tenere traccia di locali e parametri non appena vengono ottimizzati e memorizzati nei registri. Se davvero ne hai bisogno, puoi guardare il codice compilato JIT e localizzare i valori nei registri ma potrebbe richiedere un sacco di conservazione del libro.

14

Tali sono le gioie del codice ottimizzato per il debugging. Se usi! Sosex.mdv, avrai almeno i tipi di dati dei tuoi locals/args. Quindi puoi eseguire! Sos.dso o! Sosex.mdso per vedere gli oggetti nello stack con i loro tipi. Di solito non è molto difficile rintracciare gli argomenti in questo modo, anche se non sempre funziona.