Question

Je lance MSIL dans Visual Studio ou via MDBG.

Est-il possible d'afficher le contenu de la pile MSIL?

par exemple. si j'exécute ldloc « une variable », est-il possible de regarder la pile et de voir que la variable est maintenant sur la pile.

Je présume que la pile MSIL est pas la même que la pile CPU à savoir la mémoire pointée par le registre SP?

Était-ce utile?

La solution

Lors de l'exécution, il est en fait pas de pile « MSIL ». Même en mode débogage du code qui est exécuté est toujours JIT compilé. Le processus de compilation JIT MSIL « aplatit » à partir d'une machine à pile virtuelle en code assembleur ordinaire pour la plate-forme que vous utilisez sur. Cela signifie ldloc.0 pourrait finir par être traduit en quelque chose comme mov eax, [sp + 4], ou même un non-op, si la valeur était déjà trainait dans un registre. Si vous voulez déboguer le ldloc d'instruction spécifique, alors vous devez regarder dans le dissasembly pour voir ce que le ldoloc a été traduit en et où son chargement en fait les données.

Les outils WinDbg + SoS (mentionné dans un autre poste) vous aidera à voir la pile de CPU, dans une perspective de code managé . Ils ne vous permettra pas, cependant, de voir la pile « MSIL » parce qu'il n'y a pas un pour voir.

Autres conseils

Vous pouvez le faire et plus en utilisant WinDbg + SoS. Consultez cette question des références sur la façon d'utiliser WinDbg.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top