Frage

Ich betreiben MSIL in Visual Studio oder über MDBG.

Gibt es eine Möglichkeit, den Inhalt des MSIL Stapel angezeigt wird?

z. wenn ich ldloc „einige Variable“ ausführen, ist es eine Möglichkeit, auf dem Stapel suchen und zu sehen, dass die Variable nun auf dem Stapel ist.

Ich bin die Annahme, dass die MSIL Stapel nicht das gleiche wie die CPU-Stack das heißt der Speicher durch das SP-Register zeigte auf?

War es hilfreich?

Lösung

Zur Laufzeit gibt es eigentlich nicht „MSIL“ Stapel. Auch im Debug-Modus der Code, der ausgeführt wird, ist immer JIT kompiliert. Der Prozess des JIT-Kompilierung MSIL „verflacht“ es von einem virtuellen Stapelmaschine in gewöhnlichen Assembler-Code für die Plattform, die Sie laufen auf. Das bedeutet ldloc.0 könnte am Ende in so etwas wie mov eax, [sp + 4] übersetzt oder sogar einen No-op, wenn der Wert bereits herumliegen in einem Register. Wenn Sie die spezifische Anweisung ldloc debuggen möchten, dann müssen Sie in der dissasembly es betrachten, um zu sehen, was die ldoloc übersetzt in und wo es tatsächlich ist die Daten aus geladen werden.

Die WinDbg + SoS-Tools (in einem anderen Beitrag erwähnt) werden Sie auf Hilfe sieht den CPU-Stack von einer verwalteten-Code Perspektive . Sie werden nicht zulassen, dass Sie jedoch die „MSIL“ Stack zu sehen, weil es nicht eine zu sehen ist.

Andere Tipps

Sie können das tun und mehr mit WinDbg + SoS. Überprüfen Sie diese Frage Referenzen wie WinDbg verwenden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top