Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 获取c程序的编译asm_C#_Compiler Construction_Assembly_Jit - Fatal编程技术网

C# 获取c程序的编译asm

C# 获取c程序的编译asm,c#,compiler-construction,assembly,jit,C#,Compiler Construction,Assembly,Jit,可能重复: 这是可能的吗?如果是的话,我想在JIT后我需要做些什么,但我不知道如何进行此操作?您可以使用Visual Studio调试器Debug->Windows->反汇编查看JIT程序集 如果在Visual Studio中启动程序时,调试器已经连接了F5,那么当抖动检测到这种情况时,您将看到生成的程序集的非优化版本 如果您需要jitted程序集的优化、非调试版本,那么您需要在发布模式下编译程序,并在Visual Studio中启动它,而不需要附加调试程序Ctrl+F5。然后,一旦知道所需的

可能重复:


这是可能的吗?如果是的话,我想在JIT后我需要做些什么,但我不知道如何进行此操作?

您可以使用Visual Studio调试器Debug->Windows->反汇编查看JIT程序集

如果在Visual Studio中启动程序时,调试器已经连接了F5,那么当抖动检测到这种情况时,您将看到生成的程序集的非优化版本


如果您需要jitted程序集的优化、非调试版本,那么您需要在发布模式下编译程序,并在Visual Studio中启动它,而不需要附加调试程序Ctrl+F5。然后,一旦知道所需的代码部分已经JIT,就将调试器附加到正在运行的进程。然后您可以中断并查看jitted程序集。

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

如果您只是对它的外观感兴趣,那么在调试时右键单击“源代码”窗口,然后选择“转到反汇编”。在调试发布版本并使用工具+选项、调试器和常规重新启用JIT编译器优化器之前,您不会查看“真实”机器代码


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

如果可能,您需要哪个编译的ASM?JIT'ed ASM可能取决于具体情况。您想要MSIL吗?为此,您有ILDasm@Arafangion我不太担心,我会接受生成的任何asm。Yosy,我想要的是进入处理器的内容,而不是MSIL或CIL代码。@JonAlb:处理器不能执行IL,它执行asm命令。您可以从WinDbg之类的本机调试器中看到它们。看到了吗?我能拿到符合要求的asm吗?是的,你说得对。我总是假设人们希望看到asm来分析实际和精确的代码行为。VS对于这样的调查来说不是一件好事。但总的来说,从原则上理解正在发生的事情就足够了+1.