It’s 10 pm, do you know what your JITter is doing?

Ever have that awkward feeling like you don’t know what actually gets executed as a result of your managed code? Visual Studio allows you to inspect the JITted code easily but does require a few tweaks first:

First set your project to build in Release mode.
Next go to Tools|Options|Debugging and uncheck Suppress JIT optimization on module load (Managed only) and Enabled Just My Code (Managed only)
Now you can run your project and set a breakpoint where you want to look at code and go to Debug | Windows | Disassembly to get an annotated disassembly like the following: 
    static void Main(string[] args)    {        DoTest();00000000 push ebp 00000001 mov ebp,esp 00000003 push esi 00000004 call dword ptr ds:[00159B7Ch]         Console.WriteLine(s);0000000a mov esi,dword ptr ds:[037D5B20h] 00000010 call 6B20BE78 00000015 mov ecx,eax 00000017 mov edx,esi 00000019 mov eax,dword ptr [ecx] 0000001b call dword ptr [eax+000000D8h] 00000021 pop esi     }00000022 pop ebp 00000023 ret  

Leave a Reply