Почему профилировщик не может прикрепить?

Я написал небольшой профилировщик для приложений.NET. Он использует ICorProfilerCallback2 интерфейс.

Профилировщик подключается и хорошо работает для приложения.NET 2.0, но не работает для.NET >2.0 (3.0, 3.5, 4.0). Когда я запускаю exe, скомпилированный с.NET 4.0, ничего не происходит, однако для.NET 2.0 запускается профилировщик. Я устанавливаю следующие переменные перед запуском управляемого exe

@Echo off
set Cor_Enable_Profiling=0x1
set COR_PROFILER={67D8965A-8686-2639-9C24-E1F7D13EE105}
set COR_PROFILER_DLL=e:\Debug\Profiler.dll
set COR_PROFILER_PATH=e:\Debug\Profiler.dll

Есть идеи, почему это может произойти? Это даже не входит в DllMain

1 ответ

Timotei,

Обсуждаемая вами проблема, вероятно, освещена в сообщении Дэвида Бромана:
Блог API профилирования CLR Дэвида Бромана: запустите двоичный файл профилировщика V2 на CLR V4

Для среды CLR V4 вы должны увидеть некоторую полезную информацию в журнале событий (просмотр с помощью Event Viewer), объясняющую, почему профилировщик не смог загрузить.

Если вы не хотите использовать COMPLUS_ProfAPI_ProfilerCompatibilitySetting настройка обсуждается в блоге, вы также можете поддержать ICorProfilerCallback3 интерфейс для добавления поддержки среды выполнения V4.

С CLR V4 вам также может понадобиться рассмотреть параллельные сценарии, когда обе среды исполнения V2 и V4 загружаются в один исполняемый файл. Для получения дополнительной информации обратитесь к другому посту Дэвида под названием "Профилировщики, параллельные экземпляры CLR в процессе и бесплатный тестовый комплект" (к сожалению, я не могу опубликовать ссылку на него также из-за предотвращения спама).

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