获取编译的as#c#程序

时间:2011-08-07 22:38:47

标签: c# compiler-construction assembly jit

  

可能重复:
  Retrieve JIT output

这可能吗,如果是这样的话(我需要在它的JITed之后我想,但我不知道如何去做)?

2 个答案:

答案 0 :(得分:5)

您可以使用Visual Studio调试器(调试 - > Windows - > 反汇编)查看jitted程序集。

如果在已安装调试器的情况下启动程序(Visual Studio中的 F5 ),则会看到抖动检测到这种情况时生成的程序集的非优化版本。 / p>

如果你需要jitted程序集的优化的非调试版本,那么你需要在Release模式下编译你的程序并在没有连接调试器的情况下启动它(Visual Studio中的 Ctrl + F5 )。然后,一旦知道所需的代码段已被jitted,就将调试器附加到正在运行的进程。然后你可以打破并查看jitted装配。

答案 1 :(得分:3)

.NET使用即时编译器。在方法开始执行之前的最后一刻,才会生成机器代码。这使得“捕获ASM”非常困难。

如果您只是对它的外观感兴趣,请在调试时右键单击源代码窗口,然后选择“转到反汇编”。在调试Release版本并使用Tools + Options,Debugger,General重新启用JIT编译器优化器之前,您不会查看“真正的”机器代码。

另一种选择是运行ngen.exe,即.NET的'预编译器'。 foo.dll程序集将在c:\ windows \ assembly或c:\ windows \ microsoft.net \ assembly目录中生成foo.ni.dll程序集。此.ni.dll图像文件包含jitted机器代码。