.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。 |