Domanda

corro MSIL all'interno di Visual Studio o tramite MDBG.

C'è un modo di visualizzare il contenuto dello stack MSIL?

es. se eseguo ldloc "qualche variabile", non v'è alcun modo di guardare la pila e vedendo che la variabile è ora in pila.

sto presumendo che la risma MSIL non è la stessa della CPU pila vale a dire la memoria a cui punta il registro SP?

È stato utile?

Soluzione

In fase di runtime, c'è in realtà non è un qualsiasi stack "MSIL". Anche in modalità di debug del codice che viene eseguito è sempre JIT compilato. Il processo di compilazione JIT MSIL "appiattisce" da una macchina stack virtuale in codice assemblea ordinaria per la piattaforma si sta lavorando su. Ciò significa che ldloc.0 potrebbe finire per essere tradotto in qualcosa di simile mov eax, [sp + 4], o anche un no-op, se il valore è stato già in giro in un registro. Se si desidera eseguire il debug specifico ldloc istruzioni, allora dovete guardare in dissasembly per vedere ciò che il ldoloc è stato tradotto in e dove in realtà è il caricamento dei dati da.

Gli strumenti di WinDbg + SOS (citati in un altro post) vi aiuterà a visualizzare lo stack CPU, in una prospettiva di codice gestito . Essi non vi permetterà, invece, di vedere lo stack "MSIL", perché non ce n'è uno da vedere.

Altri suggerimenti

Si può fare questo e altro ancora utilizzando WinDbg + SoS. Controllare questa domanda per i riferimenti su come utilizzare WinDbg.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top