Профилирование и перезапись 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() Источник здесь для тех, кто заинтересован в том, чтобы понять, почему это происходит.

Другие вопросы по тегам