如何在Visual Studio(而不是MSIL)中查看C#的汇编代码?

在此video中 (8:20)显示C#代码的汇编代码。 它没有告诉如何显示它(我听到的全部按F11,但它对我不起作用),也许它不适用于Visual Studio的Express版本?

在菜单中选择Debug – Windows – Assembly。 如果Express Edition中没有该菜单,那么是的,它不受支持。

所有这些答案都存在问题。

如果您的MSVC版本支持它,您确实可以在Debug / Disassembly窗口中看到汇编程序指令(仅在主动调试应用程序时可用)。

但是,jit编译器会检测您何时尝试在调试器下运行它。 因此,即使您正在进行发布版本,它仍然不会与您从命令行运行的发布版本完全相同。

从好的方面来说,调试会更容易。 从负面来看,它使.Net编译器看起来非常糟糕,因为代码不如“真实”运行时那么高效。

有一个技巧我用来看“真正的”汇编器输出。 在MSVC中,使用CTRL-F5(无需调试启动)启动应用程序。 然后使用Debug / Attach to Process来…嗯…附加到进程。

您现在可以使用调试器中断该过程并检查“真实”asm输出。 实际调试将更加困难,因为代码已经进行了更多优化,但是反汇编窗口将让您更好地了解jit编译器的工作情况。

我确定有一种方法可以用NGEN做这个(也许是这个 ?),但只是附加对我来说效果很好。

您正在寻找的窗口是Debug – > Windows – > Disassembly

你必须调试它才能存在,并且在连接调试器时你可以按Ctrl + Alt + D来实现它。

您无法在任何其他时间查看汇编代码(机器代码),因为它不存在。 它作为机器代码存在的唯一时间是加载和运行时。 .Net不编译成机器代码,它编译成MSIL,因此它必须在它出现之前进行JIT编译(及时)。 只有在它运行时才会发生。

如此处所述,您应该运行代码并在断点处停止然后调试 – > Windows – >反汇编或Ctrl + Alt + D


如果不存在,则应打开选项Dialog并将Address-leve debugging设置为启用 在这里