在VS2013中调试时如何查看CIL堆栈?

时间:2014-08-03 04:40:52

标签: .net debugging visual-studio-2013 stack cil

我有一个.NET程序,我已经用ildasm反汇编了。然后我使用/ debug标志用ilasm重新编译它,以便创建一个链接到.il文件的.pdb。一切正常,我现在可以在Visual Studio 2013 Professional中调试该程序,并在单个指令上放置断点,然后逐个逐步执行。能够逐步完成指令非常棒,但我不知道如何查看他们正在操作的堆栈,所以我所能做的只是逐步完成指令而不需要任何指令了解他们正在使用哪些数据。如何查看堆栈中的对象?

1 个答案:

答案 0 :(得分:4)

那是不可能的。 CIL是虚拟机的说明,您的计算机不是虚拟的。 CIL指令总是在程序运行时转换为机器代码,即Just In Time编译器(又称抖动)的工作。机器代码是处理器执行的实际指令。 CIL是语言编译器和执行程序的实际机器之间的一个很好的抽象,因为AnyCPU可以成为项目的平台目标。不同的处理器有不同的紧张情绪。

您只能查看已执行的实际指令,Debug + Windows + Disassembly。需要了解汇编代码。而且你只能看到真正的堆栈,调试+ Windows +调用堆栈的方法,Debug + Windows + Locals的方法参数和局部变量。这很容易理解。

您可能应该知道的另一个细节是,您在“反汇编”窗口中查看的机器代码不是将在用户计算机上执行的代码。抖动内置了优化器,可以进行额外的工作,以尽量提高机器代码的效率。在Debug版本中和/或附加调试器时关闭该优化器。使调试程序更容易。如果要查看 real 代码,则必须调试Release版本并更改选项。工具+选项,调试,常规,取消"抑制模块负载的JIT优化"选项。优化的代码可能与CIL严重不匹配,并使这些调试窗口在内联方法,重新排列语句和消除变量时表现得很有趣。