2016-10-06 28 views
0

this question asking the same but in VS类似,我想问一下如何使用WinDbg来查看JITted方法的diassembly?如何在使用WinDbg连接到.NET程序时查看JITted方法的反汇编?

将此分解为两部分,在这两种情况下,都有与我想要反汇编的方法相同的SomeNamespace.SomeClass.Foo()

  1. 我们只有可执行文件program.exe,并且想通过WinDbg的Open Executable运行它。
  2. 有一个已经运行的过程,我想检查相同的JIT方法。 (说我们不能控制过程如何开始)

现在从我的理解,JIT运行时第一次调用方法。如果这是真的,那么在2.中可能是该方法尚未被打乱的情况。有没有办法强制JIT在这种情况下运行该方法,以便我们检查结果?

TL; DR:如何使用WinDbg反汇编JITted方法?

回答

1

我不知道强迫的方法的JIT编译的一种方式,但'命令!sosex.mbp(集管理断点)还工程时,该方法尚未被激发,只要JIT编译就会中断。

之后,SOS命令!ip2md,!dumpil!u可能会有所帮助。如果您知道JITted代码地址,您也可以在其上执行本机u

正如@Steve Johnson,SOSEX的作者提到,在评论中,SOSEX也有命令!mu(“管理装卸”)和!muf(“管理装卸功能”),可以与已即时编译功能的帮助。

+1

问题不明确。标题和tl; dr询问如何拆解jitted方法,但问题的核心问题是强制jit采用非jitted方法。对于一个已经被激发的方法,在!sos.u上使用!sosex.mu和!sosex.muf。如果方法没有被激发,使用托马斯的方法。 –

1

你可以通过调用PrepareMethod

您可以在WinDbg中和SOS u命令查看拆卸强制JIT编译。见示例here

最后,也许你可以试试DumpMiner。这个UI工具,让你查看实时编译的方法,拆卸不知道如何使用WinDbg