Поделиться через


События загрузчика (трассировка событий Windows)

Эти события собирают сведения о загрузке и выгрузке доменов приложений, сборок и модулей.

Все события загрузчика создаются при использовании ключевого слова LoaderKeyword (0x8). События DCStart и DCEnd создаются при использовании ключевого слова LoaderRundownKeyword (0x8) с включенным ключевым словом StartRundown/EndRundown . (Дополнительные сведения см. в разделе CLR ETW Keywords and Levels.)

События домена приложения

В таблице ниже показаны ключевое слово и уровень.

Ключевое слово для вызова события Мероприятие Уровень
LoaderKeyword (0x8) AppDomainLoad_V1 и AppDomainUnLoad_V1. Информационный (4)
LoaderRundownKeyword (0x8) +

StartRundownKeyword
AppDomainDCStart_V1 Информационный (4)
LoaderRundownKeyword (0x8) +

EndRundownKeyword
AppDomainDCEnd_V1 Информационный (4)

В таблице ниже представлены сведения о событии.

Мероприятие Идентификатор события Description
AppDomainLoad_V1 (регистрируется для всех доменов приложений) 156 Создается каждый раз, когда во время существования процесса создается домен приложения.
AppDomainUnLoad_V1 157 Создается каждый раз, когда во время существования процесса уничтожается домен приложения.
AppDomainDCStart_V1 157 Перечисляет домены приложений в течение очистки запуска.
AppDomainDCEnd_V1 158 Перечисляет домены приложений в течение очистки завершения.

В таблице ниже представлены данные события.

Имя поля Тип данных Description
AppDomainID win:UInt64 Уникальный идентификатор домена приложения.
AppDomainFlags win:UInt32 0x1: домен по умолчанию.

0x2: исполняемый файл.

0x4: домен приложения, бит 28–31: политика общего доступа этого домена.

0: общий домен.
AppDomainName win:UnicodeString Понятное имя домена приложения. Может измениться в течение времени существования процесса.
AppDomainIndex win:UInt32 Индекс этого домена приложения.
ClrInstanceID win:UInt16 Уникальный идентификатор экземпляра CLR или CoreCLR.

События сборки загрузчика среды CLR

В таблице ниже показаны ключевое слово и уровень.

Ключевое слово для вызова события Мероприятие Уровень
LoaderKeyword (0x8) AssemblyLoad и AssemblyUnload. Информационный (4)
LoaderRundownKeyword (0x8) +

StartRundownKeyword
AssemblyDCStart Информационный (4)
LoaderRundownKeyword (0x8) +

EndRundownKeyword
AssemblyDCEnd Информационный (4)

В таблице ниже представлены сведения о событии.

Мероприятие Идентификатор события Description
AssemblyLoad_V1 154 Наступает, когда сборка загружается.
AssemblyUnload_V1 155 Наступает, когда сборка выгружается.
AssemblyDCStart_V1 155 Перечисляет сборки во время очистки запуска.
AssemblyDCEnd_V1 156 Перечисляет сборки во время очистки завершения.

В таблице ниже представлены данные события.

Имя поля Тип данных Description
AssemblyID win:UInt64 Уникальный идентификатор сборки.
AppDomainID win:UInt64 Идентификатор домена этой сборки.
BindingID win:UInt64 Идентификатор, уникальным образом определяющий привязку сборки.
AssemblyFlags win:UInt32 0x1: сборка, не зависящая от домена.

0x2: динамическая сборка.

0x4: сборка с образом в машинном коде.

0x8: собираемая сборка.
AssemblyName win:UnicodeString Полное имя сборки.
ClrInstanceID win:UInt16 Уникальный идентификатор экземпляра CLR или CoreCLR.

События модулей

В таблице ниже показаны ключевое слово и уровень.

Ключевое слово для вызова события Мероприятие Уровень
LoaderKeyword (0x8) ModuleLoad_V2 и ModuleUnload_V2. Информационный (4)
LoaderRundownKeyword (0x8) +

StartRundownKeyword
ModuleDCStart_V2 Информационный (4)
LoaderRundownKeyword (0x8) +

EndRundownKeyword
ModuleDCEnd_V2 Информационный (4)

В таблице ниже представлены сведения о событии.

Мероприятие Идентификатор события Description
ModuleLoad_V2 152 Вызывается при загрузке модуля в течение времени существования процесса.
ModuleUnload_V2 153 Вызывается при выгрузке модуля в течение времени существования процесса.
ModuleDCStart_V2 153 Перечисляет модули во время очистки запуска.
ModuleDCEnd_V2 154 Перечисляет модули во время очистки завершения.

В таблице ниже представлены данные события.

Имя поля Тип данных Description
ModuleID win:UInt64 Уникальный идентификатор модуля.
AssemblyID win:UInt64 Идентификатор сборки, в которой находится этот модуль.
ModuleFlags win:UInt32 0x1: модуль, не зависящий от домена.

0x2: модуль с образом в машинном коде.

0x4: динамический модуль.

0x8: модуль манифеста.
Reserved1 win:UInt32 Зарезервированное поле.
ModuleILPath win:UnicodeString Путь к образу общего промежуточного языка (CIL) для модуля или имени динамического модуля, если это динамическая сборка (завершаемая null).
ModuleNativePath win:UnicodeString Путь к образу модуля в машинном коде, если существует (строка, заканчивающаяся нулем).
ClrInstanceID win:UInt16 Уникальный идентификатор экземпляра CLR или CoreCLR.
ManagedPdbSignature win:GUID Подпись GUID управляемой базы данных программы (PDB), которая соответствует этому модулю. (См. раздел «Примечания».)
ManagedPdbAge win:UInt32 Значение возраста, записанное в управляемую базу данных программы, соответствующую этому модулю. (См. раздел «Примечания».)
ManagedPdbBuildPath win:UnicodeString Путь к расположению, где была выполнена сборка управляемой базы данных программы, соответствующей этому модулю. В некоторых случаях это просто имя файла. (См. раздел «Примечания».)
NativePdbSignature win:GUID Подпись GUID базы данных программы для средства создания машинных образов (NGen), соответствующая этому модулю, если применимо. (См. раздел «Примечания».)
NativePdbAge win:UInt32 Значение возраста, записанное в базе данных программы NGen, соответствующей этому модулю, если применимо. (См. раздел «Примечания».)
NativePdbBuildPath win:UnicodeString Путь к расположению, где была выполнена сборка базы данных программы NGen, соответствующей этому модулю, если применимо. В некоторых случаях это просто имя файла. (См. раздел «Примечания».)

Замечания

  • Поля, в именах которых есть строка Pdb, могут использоваться средствами профилирования для поиска баз данных программ, соответствующих модулям, которые были загружены во время сеанса профилирования. Значения этих полей соответствуют данным, записанным в разделах IMAGE_DIRECTORY_ENTRY_DEBUG модуля и обычно используемым отладчиками для поиска баз данных программ, соответствующих загруженным модулям.

  • Имена полей, начинающиеся с ManagedPdb, ссылаются на управляемый PDB, соответствующий модулю CIL, созданному управляемым компилятором (например, компилятором C# или Visual Basic). Этот PDB использует управляемый формат PDB и описывает, как элементы исходного управляемого исходного исходного кода, такие как файлы, номера строк и имена символов, сопоставляются с элементами CIL, скомпилируемыми в модуль CIL.

  • Имена полей, которые начинаются с NativePdb, ссылаются на базу данных программы NGen, созданную путем вызова метода NGEN createPDB. Эта база данных программы использует машинный формат PDB и описывает порядок сопоставления элементов (файлов, номеров строк и имен символов) из первоначального управляемого исходного кода с машинными элементами MSIL, скомпилированными в модуль NGen.

События модулей домена среды CLR

В таблице ниже показаны ключевое слово и уровень.

Ключевое слово для вызова события Мероприятие Уровень
LoaderKeyword (0x8) DomainModuleLoad_V1 Информационный (4)
LoaderRundownKeyword (0x8) +

StartRundownKeyword
DomainModuleDCStart_V1 Информационный (4)
LoaderRundownKeyword (0x8) +

EndRundownKeyword
DomainModuleDCEnd_V1 Информационный (4)

В таблице ниже представлены сведения о событии.

Мероприятие Идентификатор события Description
DomainModuleLoad_V1 151 Вызывается при загрузке модуля для домена приложения.
DomainModuleDCStart_V1 151 Перечисляет модули, загруженные для домена приложения во время очистки запуска, и регистрируется для всех доменов приложений.
DomainModuleDCEnd_V1 152 Перечисляет модули, загруженные для домена приложения во время очистки завершения, и регистрируется для всех доменов приложений.

В таблице ниже представлены данные события.

Имя поля Тип данных Description
ModuleID win:UInt64 Определяет сборку, к которой относится этот модуль.
AssemblyID win:UInt64 Идентификатор сборки, в которой находится этот модуль.
AppDomainID win:UInt64 Идентификатор домена приложения, в котором используется этот модуль.
ModuleFlags win:UInt32 0x1: модуль, не зависящий от домена.

0x2: модуль с образом в машинном коде.

0x4: динамический модуль.

0x8: модуль манифеста.
Reserved1 win:UInt32 Зарезервированное поле.
ModuleILPath win:UnicodeString Путь к изображению CIL для модуля или имени динамического модуля, если это динамическая сборка (завершаемая значение NULL).
ModuleNativePath win:UnicodeString Путь к образу модуля в машинном коде, если существует (строка, заканчивающаяся нулем).
ClrInstanceID win:UInt16 Уникальный идентификатор экземпляра CLR или CoreCLR.

События диапазона модуля

В таблице ниже показаны ключевое слово и уровень.

Ключевое слово для вызова события Мероприятие Уровень
PerfTrackKeyWord) ModuleRange Информационный (4)
PerfTrackKeyWord ModuleRangeDCStart Информационный (4)
PerfTrackKeyWord ModuleRangeDCEnd Информационный (4)

В таблице ниже представлены сведения о событии.

Мероприятие Идентификатор события Description
ModuleRange 158 Это событие присутствует, если загруженный образ генератора образов в машинном коде (NGen) был оптимизирован с помощью IBC, и содержит сведения об активных разделах образа NGen.
ModuleRangeDCStart 160 Событие ModuleRange , инициируемое в начале очистки.
ModuleRangeDCEnd 161 Событие ModuleRange , инициируемое в конце очистки.

В таблице ниже представлены данные события.

Имя поля Тип данных Description
ClrInstanceID win:UInt16 Однозначно определяет конкретный экземпляр среды CLR в процессе, если загружено несколько экземпляров среды CLR.
ModuleID win:UInt64 Определяет сборку, к которой относится этот модуль.
RangeBegin win:UInt32 Смещение в модуле, представляющее начало диапазона для указанного типа диапазона.
RangeSize win:UInt32 Размер указанного диапазона в байтах.
RangeType win:UInt32 Одно значение, 0x4, используемое для представления неактивных диапазонов IBC. В будущем это поле может представлять больше значений.
RangeSize1 win:UInt32 0 обозначает недопустимые данные.
RangeBegin2 win:UnicodeString

Замечания

Если загруженный образ NGen в процессе .NET Framework был оптимизирован с помощью IBC, событие ModuleRange , которое содержит активные диапазоны в образе NGen, регистрируется с идентификаторами moduleID и ClrInstanceID. Если образ NGen не оптимизирован с помощью IBC, это событие не регистрируется. Для определения имени модуля это событие необходимо сопоставить с событиями ETW загрузки модуля.

Размер полезной нагрузки для этого события различен; поле Count указывает число смещений диапазона, которые содержатся в событии. Для определения фактических диапазонов это событие нужно сопоставить с событием Windows IStart . Событие загрузки образа Windows регистрируется при каждой загрузке образа и содержит виртуальный адрес загруженного образа.

События диапазона модуля инициируются при любом уровне ETW не ниже 4 и классифицируются как информационные.

См. также