2016-07-06 11 views
0

Я собираю главное преимущество использования ICLRProfiling::AttachProfiler метода CLR Profiler является то, что теперь вы можете прикрепить CLR профилировщика долго после целевой процесс начался и, что вы также не нужно передавать переменные среды COR_ENABLE_PROFILING и COR_PROFILER в процесс при запуске? Оба этих правильных предположения?CLR профилирование и Переписав с помощью ICLRProfiling :: AttachProfiler()

Кроме того, я прочитал в команде CLR профилированию blog post from 2011 что ICLRProfiling::AttachProfiler не поддерживает следующие, но будет в будущем:

  • GetILFunctionBody

  • GetILFunctionBodyAllocator

  • SetILFunctionBody

  • SetILInstrumentedCodeMap

  • SetEnterLeaveFunctionHooks*

  • SetFunctionIDMapper*

  • GetNotifiedExceptionClauseInfo

  • Все методы, связанные с Enter/Leave/Tailcall

ли они теперь поддерживаются? Я спрашиваю, так как я больше ничего не нашел по этому вопросу в Интернете, и многие из ссылок Microsoft с 2011-2012 годов уже мертвы. Если нет, то можно ли даже IL переписать тело функции при использовании ICLRProfiling::AttachProfiler для присоединения моего профилировщика CLR?

ответ

0

Ответ был грустным: «Нет», вы не можете выполнять переписку IL, когда в режиме CLR attach profiler; он поддерживается только в режиме запуска процесса.

Вызов метода ICorProfilerInfo::GetILFunctionBody() в моей реализации CLR Profiler возвращает CORPROF_E_UNSUPPORTED_FOR_ATTACHING_PROFILER:

GetILFunctionBody() завершилась с ошибкой 0x8013136f

ICorProfilerInfo::GetILFunctionBody()source is here для тех, кто заинтересован в копаться, почему это происходит.