这些事件将收集与加载和卸载应用程序域、程序集和模块相关的信息。
所有加载程序事件均在 LoaderKeyword (0x8) 关键字下引发。 DCStart 和 DCEnd 事件在 LoaderRundownKeyword (0x8) 下引发(启用了 StartRundown/EndRundown)。 (有关详细信息,请参阅 CLR ETW Keywords and Levels。)
应用程序域事件
下表显示了关键字和级别。
| 引发事件的关键字 | 事件 | Level | 
|---|---|---|
| LoaderKeyword(0x8) | AppDomainLoad_V1和AppDomainUnLoad_V1 | 信息性 (4) | 
| LoaderRundownKeyword(0x8) +StartRundownKeyword | AppDomainDCStart_V1 | 信息性 (4) | 
| LoaderRundownKeyword(0x8) +EndRundownKeyword | AppDomainDCEnd_V1 | 信息性 (4) | 
下表显示了事件信息。
| 事件 | 事件 ID | 说明 | 
|---|---|---|
| AppDomainLoad_V1(为所有应用程序域记录) | 156 | 每当在进程生存期内创建应用程序域时引发。 | 
| AppDomainUnLoad_V1 | 157 | 每当在进程生存期内销毁应用程序域时引发。 | 
| AppDomainDCStart_V1 | 157 | 在启动断开期间枚举应用程序域。 | 
| AppDomainDCEnd_V1 | 158 | 在结束断开期间枚举应用程序域。 | 
下表显示了事件数据。
| 字段名 | 数据类型 | 说明 | 
|---|---|---|
| AppDomainID | win:UInt64 | 应用程序域的唯一标识符。 | 
| AppDomainFlags | win:UInt32 | 0x1:默认域。 0x2:可执行。 0x4:应用程序域,位 28-31:共享此域的策略。 0:一个共享域。 | 
| AppDomainName | win:UnicodeString | 友好的应用程序域名。 可能会在进程生存期内更改。 | 
| AppDomainIndex | win:UInt32 | 此应用程序域的索引。 | 
| ClrInstanceID | win:UInt16 | CLR 或 CoreCLR 的实例的唯一 ID。 | 
CLR 加载程序程序集事件
下表显示了关键字和级别。
| 引发事件的关键字 | 事件 | Level | 
|---|---|---|
| LoaderKeyword(0x8) | AssemblyLoad和AssemblyUnload | 信息性 (4) | 
| LoaderRundownKeyword(0x8) +StartRundownKeyword | AssemblyDCStart | 信息性 (4) | 
| LoaderRundownKeyword(0x8) +EndRundownKeyword | AssemblyDCEnd | 信息性 (4) | 
下表显示了事件信息。
| 事件 | 事件 ID | 描述 | 
|---|---|---|
| AssemblyLoad_V1 | 154 | 在加载程序集时引发。 | 
| AssemblyUnload_V1 | 155 | 在卸载程序集时引发。 | 
| AssemblyDCStart_V1 | 155 | 在启动断开期间枚举程序集。 | 
| AssemblyDCEnd_V1 | 156 | 在结束断开期间枚举程序集。 | 
下表显示了事件数据。
| 字段名 | 数据类型 | 说明 | 
|---|---|---|
| AssemblyID | win:UInt64 | 程序集的唯一 ID。 | 
| AppDomainID | win:UInt64 | 此程序集的域的 ID。 | 
| BindingID | win:UInt64 | 唯一地标识程序集绑定的 ID。 | 
| AssemblyFlags | win:UInt32 | 0x1:非特定于域的程序集。 0x2:动态程序集。 0x4:程序集具有本机映像。 0x8:可回收程序集。 | 
| AssemblyName | win:UnicodeString | 完全限定程序集名称。 | 
| ClrInstanceID | win:UInt16 | CLR 或 CoreCLR 的实例的唯一 ID。 | 
模块事件
下表显示了关键字和级别。
| 引发事件的关键字 | 事件 | Level | 
|---|---|---|
| LoaderKeyword(0x8) | ModuleLoad_V2和ModuleUnload_V2 | 信息性 (4) | 
| LoaderRundownKeyword(0x8) +StartRundownKeyword | ModuleDCStart_V2 | 信息性 (4) | 
| LoaderRundownKeyword(0x8) +EndRundownKeyword | ModuleDCEnd_V2 | 信息性 (4) | 
下表显示了事件信息。
| 事件 | 事件 ID | 描述 | 
|---|---|---|
| ModuleLoad_V2 | 152 | 在进程的生存期内加载模块时引发。 | 
| ModuleUnload_V2 | 153 | 在进程的生存期内卸载模块时引发。 | 
| ModuleDCStart_V2 | 153 | 在启动断开期间枚举模块。 | 
| ModuleDCEnd_V2 | 154 | 在结束断开期间枚举模块。 | 
下表显示了事件数据。
| 字段名 | 数据类型 | 说明 | 
|---|---|---|
| ModuleID | win:UInt64 | 模块的唯一 ID。 | 
| AssemblyID | win:UInt64 | 此模块所驻留的程序集的 ID。 | 
| ModuleFlags | win:UInt32 | 0x1:非特定于域的模块。 0x2:模块具有本机映像。 0x4:动态模块。 0x8:清单模块。 | 
| Reserved1 | win:UInt32 | 保留的字段。 | 
| ModuleILPath | win:UnicodeString | 模块的公共中间语言(CIL)映像的路径,或动态模块名称(如果它是动态程序集(以 null 结尾)。 | 
| ModuleNativePath | win:UnicodeString | 如果存在(以 null 结尾),则为模块本机映像的路径。 | 
| ClrInstanceID | win:UInt16 | CLR 或 CoreCLR 的实例的唯一 ID。 | 
| ManagedPdbSignature | win:GUID | 匹配此模块的托管程序数据库 (PDB) 的 GUID 签名。 (请参阅“备注”。) | 
| ManagedPdbAge | win:UInt32 | 写入匹配此模块的托管 PDB 的年限数。 (请参阅“备注”。) | 
| ManagedPdbBuildPath | win:UnicodeString | 生成匹配此模块的托管 PDB 的位置的路径。 在某些情况下,这可能只是一个文件名。 (请参阅“备注”。) | 
| NativePdbSignature | win:GUID | 匹配此模块的本机映像生成器 (NGen) PDB 的 GUID 签名(如果适用)。 (请参阅“备注”。) | 
| NativePdbAge | win:UInt32 | 写入匹配此模块的 NGen PDB 的年限数(如果适用)。 (请参阅“备注”。) | 
| NativePdbBuildPath | win:UnicodeString | 生成匹配此模块的 NGen PDB 的位置的路径(如果适用)。 在某些情况下,这可能只是一个文件名。 (请参阅“备注”。) | 
备注
- 可通过分析工具使用名称中具有“Pdb”的字段,以便查找匹配分析会话期间所加载的模块的 PDB。 这些字段的值对应写入模块 IMAGE_DIRECTORY_ENTRY_DEBUG 部分的数据,调试器通常使用此模块来帮助查找匹配已加载模块的 PDB。 
- 以“ManagedPdb”开头的字段名称是指与托管编译器(如 C# 或 Visual Basic 编译器)生成的 CIL 模块对应的托管 PDB。 此 PDB 使用托管 PDB 格式,并描述原始托管源代码中的元素(如文件、行号和符号名称)如何映射到编译到 CIL 模块中的 CIL 元素。 
- 以“NativePdb”开头的字段名是指通过调用 - NGEN createPDB而生成的 NGen PDB。 此 PDB 使用本机 PDB 格式,并介绍元素如何从原始托管的源代码中(如文件、行号和符号名)映射到被编译到 NGen 模块的本机元素。
CLR 域模块事件
下表显示了关键字和级别。
| 引发事件的关键字 | 事件 | Level | 
|---|---|---|
| LoaderKeyword(0x8) | DomainModuleLoad_V1 | 信息性 (4) | 
| LoaderRundownKeyword(0x8) +StartRundownKeyword | DomainModuleDCStart_V1 | 信息性 (4) | 
| LoaderRundownKeyword(0x8) +EndRundownKeyword | DomainModuleDCEnd_V1 | 信息性 (4) | 
下表显示了事件信息。
| 事件 | 事件 ID | 说明 | 
|---|---|---|
| DomainModuleLoad_V1 | 151 | 在为应用程序域加载模块时引发。 | 
| DomainModuleDCStart_V1 | 151 | 在启动断开期间为应用程序域枚举加载的模块,并为所有应用程序域记录。 | 
| DomainModuleDCEnd_V1 | 152 | 在结束断开期间为应用程序域枚举加载的模块,并为所有应用程序域记录。 | 
下表显示了事件数据。
| 字段名 | 数据类型 | 说明 | 
|---|---|---|
| ModuleID | win:UInt64 | 标识此模块所属的程序集。 | 
| AssemblyID | win:UInt64 | 此模块所驻留的程序集的 ID。 | 
| AppDomainID | win:UInt64 | 其中使用此模块的应用程序域的 ID。 | 
| ModuleFlags | win:UInt32 | 0x1:非特定于域的模块。 0x2:模块具有本机映像。 0x4:动态模块。 0x8:清单模块。 | 
| Reserved1 | win:UInt32 | 保留的字段。 | 
| ModuleILPath | win:UnicodeString | 模块的 CIL 映像的路径;如果它是动态程序集(以 null 结尾),则为动态模块名称。 | 
| ModuleNativePath | win:UnicodeString | 如果存在(以 null 结尾),则为模块本机映像的路径。 | 
| ClrInstanceID | win:UInt16 | CLR 或 CoreCLR 的实例的唯一 ID。 | 
模块范围事件
下表显示了关键字和级别。
| 引发事件的关键字 | 事件 | Level | 
|---|---|---|
| PerfTrackKeyWord) | ModuleRange | 信息性 (4) | 
| PerfTrackKeyWord | ModuleRangeDCStart | 信息性 (4) | 
| PerfTrackKeyWord | ModuleRangeDCEnd | 信息性 (4) | 
下表显示了事件信息。
| 事件 | 事件 ID | 说明 | 
|---|---|---|
| ModuleRange | 158 | 如果加载的本机映像生成器 (NGen) 映像已使用 IBC 进行优化,并且包含有关 NGen 映像热区的信息,则此事件存在。 | 
| ModuleRangeDCStart | 160 | ModuleRange事件在断开开始时引发。 | 
| ModuleRangeDCEnd | 161 | ModuleRange事件在断开结束时引发。 | 
下表显示了事件数据。
| 字段名 | 数据类型 | 说明 | 
|---|---|---|
| ClrInstanceID | win:UInt16 | 如果加载了 CLR 的多个实例,则唯一标识进程中 CLR 的特定实例。 | 
| ModuleID | win:UInt64 | 标识此模块所属的程序集。 | 
| RangeBegin | win:UInt32 | 模块中表示指定范围类型的范围开始位置的偏移量。 | 
| RangeSize | win:UInt32 | 指定的范围大小(以字节为单位)。 | 
| RangeType | win:UInt32 | 单个值,0x4,表示 Cold IBC 范围。 此字段未来可以表示多个值。 | 
| RangeSize1 | win:UInt32 | 0 指示不良数据。 | 
| RangeBegin2 | win:UnicodeString | 
备注
如果已使用 IBC 优化了 .NET Framework 进程中加载的 NGen 映像,则包含 NGen 映像中热度范围的 ModuleRange 事件将与其 moduleID 和 ClrInstanceID一起记录。  如果未使用 IBC 优化 NGen 映像,则不记录此事件。 若要确定模块名,则此事件必须与模块加载 ETW 事件进行整理。
此事件的负载大小可变; Count 字段指示事件中包含的范围偏移量数。  此事件必须与 Windows IStart 事件进行整理,以确定实际范围。 每当加载映像且包含已加载映像的虚拟地址时,将记录 Windows 映像加载事件。
在任何大于或等于 4 的 ETW 级别下引发模块范围事件,并将其归类为信息性事件。