Профилирование и перезапись CLR с использованием ICLRProfiling::AttachProfiler()
Я понял, что основным преимуществом использования метода CLR Profiler ICLRProfiling::AttachProfiler является то, что теперь вы можете подключать свой CLR-профилировщик еще долго после запуска целевого процесса и что вам также не нужно передавать COR_ENABLE_PROFILING
а также COR_PROFILER
переменные среды для процесса при запуске? Являются ли оба эти правильные предположения?
Кроме того, я прочитал в блоге команды профилирования CLR за 2011 год, что ICLRProfiling::AttachProfiler не поддерживает следующее, но будет в будущем:
GetILFunctionBody
GetILFunctionBodyAllocator
SetILFunctionBody
SetILInstrumentedCodeMap
SetEnterLeaveFunctionHooks*
SetFunctionIDMapper*
GetNotifiedExceptionClauseInfo
Все методы, связанные с Enter/Leave/Tailcall
Поддерживаются ли они сейчас? Я спрашиваю, так как я не нашел больше ничего на эту тему в Интернете, и многие из ссылок Microsoft с 2011-2012 годов уже устарели. Если нет, то можно ли даже IL переписать тело функции при использовании ICLRProfiling::AttachProfiler для присоединения моего CLR Profiler?
1 ответ
К сожалению, ответ был "Нет", вы не можете сделать перезапись IL, когда в режиме CLR прикрепите профилировщик; он все еще поддерживается только в режиме запуска процесса.
Призыв к ICorProfilerInfo::GetILFunctionBody()
метод в моей реализации CLR Profiler возвращает CORPROF_E_UNSUPPORTED_FOR_ATTACHING_PROFILER
:
GetILFunctionBody () завершился ошибкой 0x8013136f
ICorProfilerInfo::GetILFunctionBody()
Источник здесь для тех, кто заинтересован в том, чтобы понять, почему это происходит.