![](/img/trans.png)
[英]How can I view MSIL / CIL generated by C# compiler? Why is it called assembly?
[英]How to view the Assembly code for C# in Visual Studio (not the MSIL)?
所有这些答案都存在问题。
如果您的MSVC版本支持它,您确实可以在Debug / Disassembly窗口中看到汇编程序指令(仅在主动调试应用程序时可用)。
但是,jit编译器会检测您何时尝试在调试器下运行它。 因此,即使您正在进行发布版本,它仍然与您从命令行运行的发布版本完全相同。
从好的方面来说,调试会更容易。 从负面来看,它使.Net编译器看起来非常糟糕,因为代码不像“真实”运行时那样高效。
有一个技巧我用来看'真正的'汇编程序输出。 在MSVC中,使用CTRL-F5(无需调试启动)启动应用程序。 然后使用Debug / Attach to Process来...嗯...附加到进程。
您现在可以使用调试器中断该过程并检查“真实”asm输出。 实际调试将更加困难,因为代码已经进行了更多优化,但是反汇编窗口将让您更好地了解jit编译器的工作情况。
我确定有一种方法可以用NGEN做这个(也许这个 ?),但只是附加对我来说效果很好。
在菜单中选择Debug - Windows - Assembly。 如果Express Edition中没有该菜单,那么是的,它不受支持。
您正在寻找的窗口是Debug - > Windows - > Disassembly
你必须调试它才能存在,并且在连接调试器时你可以按Ctrl + Alt + D来实现它。
您无法在任何其他时间查看汇编代码(机器代码),因为它不存在。 它作为机器代码存在的唯一时间是加载和运行时。 .Net不编译为机器代码,它编译为MSIL,因此必须在它出现之前进行JIT编译(及时)。 只有在它运行时才会发生。
如此处所述,您应该运行代码并在断点处停止然后调试 - > Windows - >反汇编或Ctrl + Alt + D
如果不存在,则应打开选项Dialog并将Address-leve debugging设置为启用
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.