Почему профилировщик не может прикрепить?
Я написал небольшой профилировщик для приложений.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 в процессе и бесплатный тестовый комплект" (к сожалению, я не могу опубликовать ссылку на него также из-за предотвращения спама).