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

How to view the Assembly code for C# in Visual Studio (not the MSIL)?

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

的 Express 版本

在菜单中 select 调试 - Windows - 程序集。如果 Express Edition 中没有该菜单,那么是的,它不受支持。

正如所解释的 here 你应该 运行 你的代码并在断点处停止然后调试 -> Windows -> 反汇编或 Ctrl + Alt + D


如果不存在,您应该打开选项对话框并将地址级调试设置为启用

您正在查找的 window 是调试 -> Windows -> 反汇编

您必须调试某些东西才能显示它,并且在连接调试器时您可以按 Ctrl + Alt + D 来访问它。

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

所有这些答案都有问题。

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

但是,当您尝试在调试器下 运行 时,jit 编译器 会检测到 。因此,即使您正在执行 Release 构建,它仍然与您从命令行 运行 构建的 Release 构建不完全相同。

从好的方面来说,它会更容易调试。不利的一面是,它使 .Net 编译器看起来非常糟糕,因为代码的效率不如 运行 "for real."

我使用了一个技巧来查看 'real' 汇编器输出。在 MSVC 中,使用 CTRL-F5(不调试启动)启动应用程序。然后使用 Debug/Attach 来处理...嗯...附加到进程。

您现在可以使用调试器中断进程并检查 'real' asm 输出。实际上调试会更困难,因为代码已经优化了很多,但是反汇编 window 会让你更好地了解 jit 编译器的工作情况。

我确定也有一种方法可以使用 NGEN 执行此操作(也许 this?),但仅附加对我来说效果很好。