Почему профиль не может прикрепить? - PullRequest
3 голосов
/ 21 августа 2010

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

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

5 голосов
/ 03 сентября 2010

Timotei,

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

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

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

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

...