Я разрабатываю профилировщик CLR, используя интерфейсы профилирования CLR, и мне трудно заставить CLR загружать простые, неоптимизированные для профиля нативные образы (которые были скомпилированы с ngen.exe
без параметра /profile
) при запуске моего профилировщика (или, по крайней мере, кажется, что такие картинки не грузятся, но пока точно сказать не могу). Что я делаю не так?
Я проверил, что COR_PRF_USE_PROFILE_IMAGES
флаг (который разрешает только собственные изображения, оптимизированные для профиля) не установлен в моем профилировщике.
Ниже то, что я пробовал. Любая помощь/советы очень ценятся!
Выводы FUSLOGVW:
Я проверял собственные журналы связывания изображений (в FUSLOGVW.exe
), пытаясь выяснить, загружены ли изображения или нет:
При запуске
HelloWorld.exe
с «простым» собственным образом — который был NGEN'd сngen.exe install HelloWorld.exe
с включенным профилировщиком — журнал связывания сборки (ExplicitBind!FileName=(HelloWorld.exe).HTM
) показывает:Assembly manager loaded from: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll Running under executable d:\work\dotnet\projects\HelloWorld\HelloWorld\bin\x64\Debug\HelloWorld.exe --- A detailed error log follows. WRN: Native image compile options do not match request. Looking for next native image.
Итак, судя по этому предупреждению, родное изображение не было загружено.
При работе с изображением профиля, NGEN'd с
ngen.exe install HelloWorld.exe /Profile
, кажется, что изображение успешно загружено, и выходные данные связывателя сборки:LOG: Start validating all the dependencies. LOG: [Level 1]Start validating native image dependency mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089. Native image has correct version information. LOG: Validation of dependencies succeeded. LOG: Bind to native image succeeded. Attempting to use native image C:\WINDOWS\assembly\NativeImages_v4.0.30319_64\HelloWorld\5647de1868c93e9132a1952a34e0a785\HelloWorld.ni.exe. Native image successfully used.
Итак, кажется, что на этот раз изображение было загружено.
Просто для уверенности между каждым шагом ngen я удалял
c:\Windows\assembly\NativeImages_v4.0.30319_32\mscorlib
для всех изображений, чтобы согласовать используемые настройки (дополнительных зависимостей отHelloWorld.exe
нет).
Дополнительная информация:
- Я использую .NET 4.0, поэтому у меня нет доступа к
COR_PRF_DISABLE_ALL_NGEN_IMAGES
, который полностью отключает собственные изображения (описано в этом запись в блоге от Дэвида Бромана). Это могло быть полезно для устранения неполадок.