.NET 运行时方法事件

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

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

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

这些事件的 V2 版本包括 ReJITID,V1 版本没有。

MethodLoad_V1事件

下表显示了事件信息:

事件 事件 ID 描述
MethodLoad_V1 141 在加载方法时引发(JIT 加载)或 NGEN 映像。 动态和泛型方法不将此版本用于方法加载。 JIT 帮助程序永远不会使用此版本。
引发事件的关键字 水平
JITKeyword (0x10) 运行时提供程序 信息性 (4)
NGenKeyword (0x20) 运行时提供程序 信息性 (4)
字段名称 数据类型 描述
MethodID win:UInt64 方法的唯一标识符。 对于 JIT 帮助程序方法,这设置为方法的起始地址。
ModuleID win:UInt64 此方法所属的模块的标识符(JIT 帮助程序为 0)。
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 帮助程序永远不会使用此版本。
引发事件的关键字 水平
JITKeyword (0x10) 运行时提供程序 信息性 (4)
NGenKeyword (0x20) 运行时提供程序 信息性 (4)
字段名称 数据类型 描述
MethodID win:UInt64 方法的唯一标识符。 对于 JIT 帮助程序方法,这设置为方法的起始地址。
ModuleID win:UInt64 此方法所属的模块的标识符(JIT 帮助程序为 0)。
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 卸载模块或销毁应用程序域时引发。 动态方法永远不会将此版本用于方法卸载。
引发事件的关键字 水平
JITKeyword(0x10) 信息性 (4)
NGenKeyword(0x20) 信息性 (4)
字段名称 数据类型 描述
MethodID win:UInt64 方法的唯一标识符。 对于 JIT 帮助程序方法,这设置为方法的起始地址。
ModuleID win:UInt64 此方法所属的模块的标识符(JIT 帮助程序为 0)。
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 卸载模块或销毁应用程序域时引发。 动态方法永远不会将此版本用于方法卸载。
引发事件的关键字 水平
JITKeyword(0x10) 信息性 (4)
NGenKeyword(0x20) 信息性 (4)
字段名称 数据类型 描述
MethodID win:UInt64 方法的唯一标识符。 对于 JIT 帮助程序方法,这设置为方法的起始地址。
ModuleID win:UInt64 此方法所属的模块的标识符(JIT 帮助程序为 0)。
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 入口点查找结束时引发。
引发事件的关键字 水平
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 入口点查找启动时引发。
引发事件的关键字 水平
CompilationDiagnosticKeyword (0x2000000000) 信息性 (4)
字段名称 数据类型 描述
MethodID win:UInt64 R2R 方法的唯一标识符。
ClrInstanceID win:UInt16 CoreCLR 实例的唯一 ID。

MethodLoadVerbose_V1 事件

事件 事件 ID 描述
MethodLoadVerbose_V1 143 在加载 JIT 方法或加载 NGEN 映像时引发。 动态和泛型方法始终将此版本用于方法加载。 JIT 帮助程序始终使用此版本。
引发事件的关键字 水平
JITKeyword(0x10) 信息性 (4)
NGenKeyword(0x20) 信息性 (4)
字段名称 数据类型 描述
MethodID win:UInt64 方法的唯一标识符。 对于 JIT 帮助程序方法,请设置为方法的起始地址。
ModuleID win:UInt64 此方法所属的模块的标识符(JIT 帮助程序为 0)。
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 帮助程序始终使用此版本。
引发事件的关键字 水平
JITKeyword(0x10) 信息性 (4)
NGenKeyword(0x20) 信息性 (4)
字段名称 数据类型 描述
MethodID win:UInt64 方法的唯一标识符。 对于 JIT 帮助程序方法,请设置为方法的起始地址。
ModuleID win:UInt64 此方法所属的模块的标识符(JIT 帮助程序为 0)。
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 在销毁动态方法、卸载模块或销毁应用程序域时引发。 动态方法始终将此版本用于方法卸载。
引发事件的关键字 水平
JITKeyword(0x10) 信息性 (4)
NGenKeyword(0x20) 信息性 (4)
字段名称 数据类型 描述
MethodID win:UInt64 方法的唯一标识符。 对于 JIT 帮助程序方法,请设置为方法的起始地址。
ModuleID win:UInt64 此方法所属的模块的标识符(JIT 帮助程序为 0)。
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 在销毁动态方法、卸载模块或销毁应用程序域时引发。 动态方法始终将此版本用于方法卸载。
引发事件的关键字 水平
JITKeyword(0x10) 信息性 (4)
NGenKeyword(0x20) 信息性 (4)
字段名称 数据类型 描述
MethodID win:UInt64 方法的唯一标识符。 对于 JIT 帮助程序方法,请设置为方法的起始地址。
ModuleID win:UInt64 此方法所属的模块的标识符(JIT 帮助程序为 0)。
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 事件

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

引发事件的关键字 水平
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 事件

引发事件的关键字 水平
JITTracingKeyword(0x1000) 详细 (5)
事件 事件 ID 描述
MethodJitInliningSucceeded 185 当 JIT 编译器成功内联方法时引发。
字段名称 数据类型 描述
MethodBeingCompiledNamespace win:UnicodeString 正在编译的方法的命名空间。
MethodBeingCompiledName win:UnicodeString 正在编译的方法的名称。
MethodBeingCompiledNameSignature win:UnicodeString 正在编译的方法签名(以逗号分隔的类型名称列表)。
InlinerNamespace win:UnicodeString 内联器(“parent”)方法的命名空间。
InlinerName win:UnicodeString 内联器 (“parent”) 方法的名称。
InlinerNameSignature win:UnicodeString 内联器(“parent”)方法的签名(类型名称的逗号分隔列表)。
InlineeNamespace win:UnicodeString 内联 (“child”) 方法的命名空间。
InlineeName win:UnicodeString 内联 (“child”) 方法的名称。
InlineeNameSignature win:UnicodeString 内联方法(“child”)方法的签名(类型名称的逗号分隔列表)。
ClrInstanceID win:UInt16 CoreCLR 实例的唯一 ID。

MethodJitInliningFailed 事件

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

MethodJitTailCallSucceeded 事件

引发事件的关键字 水平
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 事件

引发事件的关键字 水平
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 事件

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