.NET 运行时方法事件

本文中介绍的事件用于收集特定于方法的信息。 符号解析需要这些事件的负载。 此外,这些事件还提供了一些有用的信息,例如已加载和已卸载的方法。 有关如何将这些事件用于诊断的详细信息,请参阅对 .NET 应用程序进行日志记录和跟踪

所有方法事件都具有“信息性 (4)”级别。 所有方法的详细事件都具有“详细级别 (5)”级别。

所有方法事件都是由运行时提供程序下的 JITKeyword (0x10) 关键字或 NGenKeyword (0x20) 关键字引发的,或是由断开提供程序下的 JitRundownKeyword (0x10) 或 NGENRundownKeyword (0x20) 引发的。

这些事件的 V2 版本包括 ReJITID(V1 版本不包含)。

MethodLoad_V1 事件

下表显示了事件信息:

事件 事件 ID 说明
MethodLoad_V1 141 在实时加载(JIT 加载)方法或者加载 NGEN 映像时引发。 动态和泛型方法不使用此版本进行方法加载。 JIT 帮助器从不使用此版本。
引发事件的关键字 Level
JITKeyword (0x10) 运行时提供程序 信息性 (4)
NGenKeyword (0x20) 运行时提供程序 信息性 (4)
字段名 数据类型 说明
MethodID win:UInt64 方法的唯一标识符。 对于 JIT 帮助器方法,将设置为该方法的起始地址。
ModuleID win:UInt64 此方法所属的模块标识符(0 表示 JIT 帮助器)。
MethodStartAddress win:UInt64 方法的起始地址。
MethodSize win:UInt32 方法的大小。
MethodToken win:UInt32 0 代表动态方法和 JIT 帮助器。
MethodFlags win:UInt32 0x1:动态方法。

0x2:泛型方法。

0x4:JIT 编译的代码方法(否则为 NGEN 本机映像代码)。

0x8:帮助器方法。
ClrInstanceID win:UInt16 CoreCLR 实例的唯一 ID。

MethodLoad_V2 事件

事件 事件 ID 说明
MethodLoad_V2 141 在实时加载(JIT 加载)方法或者加载 NGEN 映像时引发。 动态和泛型方法不使用此版本进行方法加载。 JIT 帮助器从不使用此版本。
引发事件的关键字 Level
JITKeyword (0x10) 运行时提供程序 信息性 (4)
NGenKeyword (0x20) 运行时提供程序 信息性 (4)
字段名 数据类型 说明
MethodID win:UInt64 方法的唯一标识符。 对于 JIT 帮助器方法,将设置为该方法的起始地址。
ModuleID win:UInt64 此方法所属的模块标识符(0 表示 JIT 帮助器)。
MethodStartAddress win:UInt64 方法的起始地址。
MethodSize win:UInt32 方法的大小。
MethodToken win:UInt32 0 代表动态方法和 JIT 帮助器。
MethodFlags win:UInt32 0x1:动态方法。

0x2:泛型方法。

0x4:JIT 编译的代码方法(否则为 NGEN 本机映像代码)。

0x8:帮助器方法。
ReJITID win:UInt64 方法的 ReJIT ID。
ClrInstanceID win:UInt16 CoreCLR 实例的唯一 ID。

MethodUnLoad_V1 事件

事件 事件 ID 说明
MethodUnLoad_V1 142 在卸载模块或销毁应用程序域时引发。 动态方法从不使用此版本进行方法卸载。
引发事件的关键字 Level
JITKeyword (0x10) 信息性 (4)
NGenKeyword (0x20) 信息性 (4)
字段名 数据类型 说明
MethodID win:UInt64 方法的唯一标识符。 对于 JIT 帮助器方法,将设置为该方法的起始地址。
ModuleID win:UInt64 此方法所属的模块标识符(0 表示 JIT 帮助器)。
MethodStartAddress win:UInt64 方法的起始地址。
MethodSize win:UInt32 方法的大小。
MethodToken win:UInt32 0 代表动态方法和 JIT 帮助器。
MethodFlags win:UInt32 0x1:动态方法。

0x2:泛型方法。

0x4:JIT 编译的代码方法(否则为 NGEN 本机映像代码)。

0x8:帮助器方法。
ClrInstanceID win:UInt16 CoreCLR 实例的唯一 ID。

MethodUnLoad_V2 事件

事件 事件 ID 说明
MethodUnLoad_V2 142 在卸载模块或销毁应用程序域时引发。 动态方法从不使用此版本进行方法卸载。
引发事件的关键字 Level
JITKeyword (0x10) 信息性 (4)
NGenKeyword (0x20) 信息性 (4)
字段名 数据类型 说明
MethodID win:UInt64 方法的唯一标识符。 对于 JIT 帮助器方法,将设置为该方法的起始地址。
ModuleID win:UInt64 此方法所属的模块标识符(0 表示 JIT 帮助器)。
MethodStartAddress win:UInt64 方法的起始地址。
MethodSize win:UInt32 方法的大小。
MethodToken win:UInt32 0 代表动态方法和 JIT 帮助器。
MethodFlags win:UInt32 0x1:动态方法。

0x2:泛型方法。

0x4:JIT 编译的代码方法(否则为 NGEN 本机映像代码)。

0x8:帮助器方法。
ReJITID win:UInt64 方法的 ReJIT ID。
ClrInstanceID win:UInt16 CoreCLR 实例的唯一 ID。

R2RGetEntryPoint 事件

事件 事件 ID 说明
R2RGetEntryPoint 159 R2R 入口点查找结束时引发。
引发事件的关键字 Level
CompilationDiagnosticKeyword (0x2000000000) 信息性 (4)
字段名 数据类型 说明
MethodID win:UInt64 R2R 方法的唯一标识符。
MethodNamespace win:UnicodeString 要查找的方法的命名空间。
MethodName win:UnicodeString 要查找的方法的名称。
MethodSignature win:UnicodeString 方法的签名(以逗号分隔的类型名称列表)。
EntryPoint win:UInt64 指向 R2R 方法入口点的指针
ClrInstanceID win:UInt16 CoreCLR 实例的唯一 ID。

R2RGetEntryPointStart 事件

事件 事件 ID 说明
R2RGetEntryPointStart 160 R2R 入口点查找开始时引发。
引发事件的关键字 Level
CompilationDiagnosticKeyword (0x2000000000) 信息性 (4)
字段名 数据类型 说明
MethodID win:UInt64 R2R 方法的唯一标识符。
ClrInstanceID win:UInt16 CoreCLR 实例的唯一 ID。

MethodLoadVerbose_V1 事件

事件 事件 ID 说明
MethodLoadVerbose_V1 143 当方法为 JIT 加载的或加载 NGEN 映像时引发。 动态和泛型方法始终使用此版本进行方法加载。 JIT 帮助器始终使用此版本。
引发事件的关键字 Level
JITKeyword (0x10) 信息性 (4)
NGenKeyword (0x20) 信息性 (4)
字段名 数据类型 说明
MethodID win:UInt64 方法的唯一标识符。 对于 JIT 帮助器方法,将设置为该方法的起始地址。
ModuleID win:UInt64 此方法所属的模块标识符(0 表示 JIT 帮助器)。
MethodStartAddress win:UInt64 起始地址。
MethodSize win:UInt32 方法长度。
MethodToken win:UInt32 0 代表动态方法和 JIT 帮助器。
MethodFlags win:UInt32 0x1:动态方法。

0x2:泛型方法。

0x4:JIT 编译的方法(否则由 NGen.exe 生成)

0x8:帮助器方法。
MethodNameSpace win:UnicodeString 与该方法关联的完整命名空间名称。
MethodName win:UnicodeString 与该方法关联的完整类名称。
MethodSignature win:UnicodeString 方法的签名(以逗号分隔的类型名称列表)。
ClrInstanceID win:UInt16 CoreCLR 实例的唯一 ID。

MethodLoadVerbose_V2 事件

事件 事件 ID 说明
MethodLoadVerbose_V1 143 当方法为 JIT 加载的或加载 NGEN 映像时引发。 动态和泛型方法始终使用此版本进行方法加载。 JIT 帮助器始终使用此版本。
引发事件的关键字 Level
JITKeyword (0x10) 信息性 (4)
NGenKeyword (0x20) 信息性 (4)
字段名 数据类型 说明
MethodID win:UInt64 方法的唯一标识符。 对于 JIT 帮助器方法,将设置为该方法的起始地址。
ModuleID win:UInt64 此方法所属的模块标识符(0 表示 JIT 帮助器)。
MethodStartAddress win:UInt64 起始地址。
MethodSize win:UInt32 方法长度。
MethodToken win:UInt32 0 代表动态方法和 JIT 帮助器。
MethodFlags win:UInt32 0x1:动态方法。

0x2:泛型方法。

0x4:JIT 编译的方法(否则由 NGen.exe 生成)

0x8:帮助器方法。
MethodNameSpace win:UnicodeString 与该方法关联的完整命名空间名称。
MethodName win:UnicodeString 与该方法关联的完整类名称。
MethodSignature win:UnicodeString 方法的签名(以逗号分隔的类型名称列表)。
ReJITID win:UInt64 方法的 ReJIT ID。
ClrInstanceID win:UInt16 CoreCLR 实例的唯一 ID。

MethodUnLoadVerbose_V1 事件

事件 事件 ID 说明
MethodUnLoadVerbose_V1 144 在销毁动态方法、卸载模块或销毁应用程序域时引发。 动态方法始终使用此版本进行方法卸载。
引发事件的关键字 Level
JITKeyword (0x10) 信息性 (4)
NGenKeyword (0x20) 信息性 (4)
字段名 数据类型 说明
MethodID win:UInt64 方法的唯一标识符。 对于 JIT 帮助器方法,将设置为该方法的起始地址。
ModuleID win:UInt64 此方法所属的模块标识符(0 表示 JIT 帮助器)。
MethodStartAddress win:UInt64 起始地址。
MethodSize win:UInt32 方法长度。
MethodToken win:UInt32 0 代表动态方法和 JIT 帮助器。
MethodFlags win:UInt32 0x1:动态方法。

0x2:泛型方法。

0x4:JIT 编译的方法(否则由 NGen.exe 生成)

0x8:帮助器方法。
MethodNameSpace win:UnicodeString 与该方法关联的完整命名空间名称。
MethodName win:UnicodeString 与该方法关联的完整类名称。
MethodSignature win:UnicodeString 方法的签名(以逗号分隔的类型名称列表)。
ClrInstanceID win:UInt16 CoreCLR 实例的唯一 ID。

MethodUnLoadVerbose_V2 事件

事件 事件 ID 说明
MethodUnLoadVerbose_V2 144 在销毁动态方法、卸载模块或销毁应用程序域时引发。 动态方法始终使用此版本进行方法卸载。
引发事件的关键字 Level
JITKeyword (0x10) 信息性 (4)
NGenKeyword (0x20) 信息性 (4)
字段名 数据类型 说明
MethodID win:UInt64 方法的唯一标识符。 对于 JIT 帮助器方法,将设置为该方法的起始地址。
ModuleID win:UInt64 此方法所属的模块标识符(0 表示 JIT 帮助器)。
MethodStartAddress win:UInt64 起始地址。
MethodSize win:UInt32 方法长度。
MethodToken win:UInt32 0 代表动态方法和 JIT 帮助器。
MethodFlags win:UInt32 0x1:动态方法。

0x2:泛型方法。

0x4:JIT 编译的方法(否则由 NGen.exe 生成)

0x8:帮助器方法。
MethodNameSpace win:UnicodeString 与该方法关联的完整命名空间名称。
MethodName win:UnicodeString 与该方法关联的完整类名称。
MethodSignature win:UnicodeString 方法的签名(以逗号分隔的类型名称列表)。
ClrInstanceID win:UInt16 CoreCLR 实例的唯一 ID。
ReJITID win:UInt64 方法的 ReJIT ID。

MethodJittingStarted_V1 事件

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

引发事件的关键字 Level
JITKeyword (0x10) 详细级别 (5)
NGenKeyword (0x20) 详细级别 (5)
事件 事件 ID 说明
MethodJittingStarted_V1 145 在方法由 JIT 编译时引发。
字段名 数据类型 说明
MethodID win:UInt64 方法的唯一标识符。
ModuleID win:UInt64 此方法所属的模块标识符。
MethodToken win:UInt32 0 代表动态方法和 JIT 帮助器。
MethodILSize win:UInt32 要进行 JIT 编译的方法的公共中间语言 (CIL) 的大小。
MethodNameSpace win:UnicodeString 与该方法关联的完整类名称。
MethodName win:UnicodeString 方法的名称。
MethodSignature win:UnicodeString 方法的签名(以逗号分隔的类型名称列表)。
ClrInstanceID win:UInt16 CoreCLR 实例的唯一 ID。

MethodJitInliningSucceeded 事件

引发事件的关键字 Level
JITTracingKeyword (0x1000) 详细级别 (5)
事件 事件 ID 说明
MethodJitInliningSucceeded 185 当方法由 JIT 编译器成功内联时引发。
字段名 数据类型 说明
MethodBeingCompiledNamespace win:UnicodeString 要编译的方法的命名空间。
MethodBeingCompiledName win:UnicodeString 要编译的方法的名称。
MethodBeingCompiledNameSignature win:UnicodeString 要编译的方法的签名(以逗号分隔的类型名称列表)。
InlinerNamespace win:UnicodeString 内联方(“父级”)方法的命名空间。
InlinerName win:UnicodeString 内联方(“父级”)方法的名称。
InlinerNameSignature win:UnicodeString 内联方(“父级”)方法的签名(以逗号分隔的类型名称列表)。
InlineeNamespace win:UnicodeString 被内联方(“子级”)方法的命名空间。
InlineeName win:UnicodeString 被内联方(“子级”)方法的名称。
InlineeNameSignature win:UnicodeString 被内联方(“子级”)方法的签名(以逗号分隔的类型名称列表)。
ClrInstanceID win:UInt16 CoreCLR 实例的唯一 ID。

MethodJitInliningFailed 事件

引发事件的关键字 Level
JITTracingKeyword (0x1000) 详细级别 (5)
事件 事件 ID 说明
MethodJitInliningFailed 192 当方法无法由 JIT 编译器内联时引发。
字段名 数据类型 说明
MethodBeingCompiledNamespace win:UnicodeString 要编译的方法的命名空间。
MethodBeingCompiledName win:UnicodeString 要编译的方法的名称。
MethodBeingCompiledNameSignature win:UnicodeString 要编译的方法的签名(以逗号分隔的类型名称列表)。
InlinerNamespace win:UnicodeString 内联方(“父级”)方法的命名空间。
InlinerName win:UnicodeString 内联方(“父级”)方法的名称。
InlinerNameSignature win:UnicodeString 内联方(“父级”)方法的签名(以逗号分隔的类型名称列表)。
InlineeNamespace win:UnicodeString 被内联方(“子级”)方法的命名空间。
InlineeName win:UnicodeString 被内联方(“子级”)方法的名称。
InlineeNameSignature win:UnicodeString 被内联方(“子级”)方法的签名(以逗号分隔的类型名称列表)。
FailAlways win:Boolean 方法是否被标记为不可内联。
FailReason win:UnicodeString 内联失败的原因。
ClrInstanceID win:UInt16 CoreCLR 实例的唯一 ID。

MethodJITTailCallSucceeded 事件

引发事件的关键字 Level
JITTracingKeyword (0x1000) 详细级别 (5)
事件 事件 ID 说明
MethodJitTailCallSucceeded 192 当方法可成功被尾调用时由 JIT 编译器引发。
字段名 数据类型 说明
MethodBeingCompiledNamespace win:UnicodeString 要编译的方法的命名空间。
MethodBeingCompiledName win:UnicodeString 要编译的方法的名称。
MethodBeingCompiledNameSignature win:UnicodeString 要编译的方法的签名(以逗号分隔的类型名称列表)。
CallerNamespace win:UnicodeString 调用方方法的命名空间。
CallerName win:UnicodeString 调用方方法的名称。
CallerNameSignature win:UnicodeString 调用方方法的签名(以逗号分隔的类型名称列表)。
CalleeNamespace win:UnicodeString 被调用方方法的命名空间。
CalleeName win:UnicodeString 被调用方方法的名称。
CalleeNameSignature win:UnicodeString 被调用方方法的签名(以逗号分隔的类型名称列表)。
TailPrefix win:Boolean 它是否为尾前缀指令。
TailCallType win:UInt32 尾调用的类型。

0:优化的尾调用 (epilog + jmp)

1:递归的尾调用(方法尾调用自身)

2:帮助程序辅助的尾调用
ClrInstanceID win:UInt16 CoreCLR 实例的唯一 ID。

MethodJITTailCallFailed 事件

引发事件的关键字 Level
JITTracingKeyword (0x1000) 详细级别 (5)
事件 事件 ID 说明
MethodJitTailCallFailed 191 当方法无法被尾调用时由 JIT 编译器引发。
字段名 数据类型 说明
MethodBeingCompiledNamespace win:UnicodeString 要编译的方法的命名空间。
MethodBeingCompiledName win:UnicodeString 要编译的方法的名称。
MethodBeingCompiledNameSignature win:UnicodeString 要编译的方法的签名(以逗号分隔的类型名称列表)。
CallerNamespace win:UnicodeString 调用方方法的命名空间。
CallerName win:UnicodeString 调用方方法的名称。
CallerNameSignature win:UnicodeString 调用方方法的签名(以逗号分隔的类型名称列表)。
CalleeNamespace win:UnicodeString 被调用方方法的命名空间。
CalleeName win:UnicodeString 被调用方方法的名称。
CalleeNameSignature win:UnicodeString 被调用方方法的签名(以逗号分隔的类型名称列表)。
TailPrefix win:Boolean 它是否为尾前缀指令。
FailReason win:UnicodeString 尾调用失败的原因。
ClrInstanceID win:UInt16 CoreCLR 实例的唯一 ID。

MethodILToNativeMap 事件

引发事件的关键字 Level
JittedMethodILToNativeMapKeyword (0x20000) 详细级别 (5)
事件 事件 ID 说明
MethodILToNativeMap 190 为 JIT 编译的方法映射 IL 到本机映射事件。
字段名 数据类型 说明
MethodID win:UInt64 方法的唯一标识符。
ReJITID win:UInt64 方法的 ReJIT ID。
MethodExtent win:UInt8 已执行 JIT 的方法的范围。
CountOfMapEntries win:UInt16 映射条目数
ILOffsets win:UInt32 IL 偏移量。
NativeOffsets win:UInt32 本机代码偏移量。
ClrInstanceID win:UInt16 CoreCLR 实例的唯一 ID。