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 both Suppress JIT optimization on module load (Managed only) and Enable 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