加载程序 ETW 事件

这些事件将收集与加载和卸载应用程序域、程序集和模块相关的信息。

所有加载程序事件均在 LoaderKeyword (0x8) 关键字下引发。 DCStartDCEnd 事件在 LoaderRundownKeyword (0x8) 下引发(启用了 StartRundown/EndRundown)。 (有关详细信息,请参阅 CLR ETW Keywords and Levels。)

应用程序域事件

下表显示了关键字和级别。

引发事件的关键字 事件 Level
LoaderKeyword (0x8) AppDomainLoad_V1AppDomainUnLoad_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) AssemblyLoadAssemblyUnload 信息性 (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_V2ModuleUnload_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 事件将与其 moduleIDClrInstanceID一起记录。 如果未使用 IBC 优化 NGen 映像,则不记录此事件。 若要确定模块名,则此事件必须与模块加载 ETW 事件进行整理。

此事件的负载大小可变; Count 字段指示事件中包含的范围偏移量数。 此事件必须与 Windows IStart 事件进行整理,以确定实际范围。 每当加载映像且包含已加载映像的虚拟地址时,将记录 Windows 映像加载事件。

在任何大于或等于 4 的 ETW 级别下引发模块范围事件,并将其归类为信息性事件。

请参阅