我在Visual Studio中,或通过运行MDBG MSIL。

是否有显示MSIL栈的内容的任何方式?

e.g。如果我执行ldloc“一些变量”,是那里看着堆,看到该变量现在是在栈上的任何方式。

我假定的MSIL堆栈不一样堆栈即存储器由SP寄存器指向的CPU?

有帮助吗?

解决方案

在运行时,实际上没有任何“MSIL”堆栈。即使在调试模式下所执行的代码始终是JIT编译。 JIT编译MSIL的过程“变平”它从一个虚拟堆栈机为您正在运行的平台例会代码。这意味着ldloc.0可能最终会被翻译成类似mov eax, [sp + 4],甚至无操作,如果该值已在寄存器躺在附近。如果你想调试的具体指令ldloc,那么你必须看它在dissasembly看什么ldoloc被翻译成并在它的实际装载从数据。

在WinDbg +的SoS工具(在另一篇文章中提到)将帮助您的查看CPU栈,从托管代码透视即可。他们不会让你,但是,看到“MSIL”堆栈,因为没有一个看到的。

其他提示

您可以使用的WinDbg +的SoS做多。检查这个问题关于如何使用WinDbg引用。

scroll top