Вопрос

Я запускаю MSIL внутри Visual Studio или через Mdbg.

Есть ли какой-нибудь способ отобразить содержимое стека MSIL?

например ,если я выполняю ldloc "некоторая переменная", есть ли какой-нибудь способ просмотреть стек и увидеть, что переменная теперь находится в стеке?

Я предполагаю, что стек MSIL - это не то же самое, что стек процессора, т. е.память, на которую указывает регистр SP?

Это было полезно?

Решение

Во время выполнения на самом деле нет никакого стека "MSIL".Даже в режиме отладки выполняемый код всегда скомпилирован в JIT.Процесс JIT-компиляции MSIL "сглаживает" его из виртуальной стековой машины в обычный ассемблерный код для платформы, на которой вы работаете.Это означает ldloc.0 может в конечном итоге быть переведено во что-то вроде mov eax, [sp + 4], или даже без операции, если значение уже лежало где-то в регистре.Если вы хотите отладить конкретную инструкцию ldloc, затем вы должны посмотреть на это в разборке, чтобы увидеть, во что был переведен ldoloc и откуда он на самом деле загружает данные.

Инструменты WinDbg + SoS (упомянутые в другом посте) помогут вам просмотр стека процессора с точки зрения управляемого кода.Однако они не позволят вам увидеть стек "MSIL", потому что там нет ни одного, который можно было бы увидеть.

Другие советы

Вы можете сделать это и многое другое, используя WinDbg + SoS.Проверить этот вопрос для получения ссылок на то, как использовать WinDbg.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top