Инъекции CLR: замена методов во время выполнения - Отладка

ОГЛАВЛЕНИЕ

Отладка

Отладка процесса JIT может оказаться довольно сложной. К счастью, существует множество хороших инструментов, которые вы можете использовать. Мы кратко расскажем о них далее.

Отладка при помощи SOS

SOS расшифровывается как Son of Strike. Это расширение отладки для CLR, которое вы можете использовать в Visual Studio или WinDbg. Это очень полезный инструмент, который поставляется с .NET Framework. Он может быть использован для отладки расширений .NET на станциях, которые не имеют установленного Visual Studio. Мы также может использовать его для нахождения и рассмотрения структур в памяти, используемых CLR, рассматривать сборку и IL и множество других вещей. Это может стать вашим основным инструментом отладки. SOS работает только тогда, когда активирована отладка вручную (unmanaged debugging). Для получения более подробной информации вам стоит посетить эту страницу.

Rotor

Rotor - это свободное программное обеспечение CLR (находящееся под лицензией Microsoft Shared Source), выпущенное компанией Майкрософт. Rotor - это не то же самое, что CLR, которое поставляется компанией Майкрософт, но это полноценный CLR. Кодов много, и, возможно, вам будет чересчур сложно найти то, что вы ищите. Мы будем использовать некоторые заголовки из Rotor для нашего регистратора JIT (JIT Logger).

Регистратор JITLogger

JITLogger - это инструмент, который регистрирует JIT- вызовы к консоли. Он может быть активирован или отключен. Далее следуют подписи JITLogger и некоторый примерный выходной результат.
public class JitLogger
{
    public static bool Enabled { get; set; }
    public static int JitCompileCount { get; }
}
Выходной результат:
JIT :   0xdd20a8 Program.StaticTests
JIT :   0xdd217b Program.TestStaticReplaceJited
JIT :   0x749c205c MethodUtil.ReplaceMethod
JIT :   0x749c2270 MethodUtil.MethodSignaturesEqual
JIT :   0x749c231c MethodUtil.GetMethodReturnType
JIT :   0x749c20e4 MethodUtil.GetMethodAddress
JIT :   0xdd23e6 StaticClassB.A