載入器 ETW 事件

這些事件會收集與載入和卸除應用程式域、元件和模組相關的資訊。

所有的載入器事件都會在 LoaderKeyword (0x8) 關鍵字底下引發。 DCStartDCEnd 事件會在啟用 StartRundown/EndRundown 時,於 LoaderRundownKeyword (0x8) 底下引發。 (如需詳細資訊,請參閱 CLR ETW Keywords and Levels)。

應用程式定義域事件

下表說明關鍵字和層級。

引發事件的關鍵字 活動 層級
LoaderKeyword (0x8) AppDomainLoad_V1AppDomainUnLoad_V1 告知性 (4)
LoaderRundownKeyword (0x8) +

StartRundownKeyword
AppDomainDCStart_V1 告知性 (4)
LoaderRundownKeyword (0x8) +

EndRundownKeyword
AppDomainDCEnd_V1 告知性 (4)

下表說明事件資訊。

活動 事件識別碼 描述
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 載入器組件事件

下表說明關鍵字和層級。

引發事件的關鍵字 活動 層級
LoaderKeyword (0x8) AssemblyLoadAssemblyUnload 告知性 (4)
LoaderRundownKeyword (0x8) +

StartRundownKeyword
AssemblyDCStart 告知性 (4)
LoaderRundownKeyword (0x8) +

EndRundownKeyword
AssemblyDCEnd 告知性 (4)

下表說明事件資訊。

活動 事件識別碼 描述
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。

模組事件

下表說明關鍵字和層級。

引發事件的關鍵字 活動 層級
LoaderKeyword (0x8) ModuleLoad_V2ModuleUnload_V2 告知性 (4)
LoaderRundownKeyword (0x8) +

StartRundownKeyword
ModuleDCStart_V2 告知性 (4)
LoaderRundownKeyword (0x8) +

EndRundownKeyword
ModuleDCEnd_V2 告知性 (4)

下表說明事件資訊。

活動 事件識別碼 描述
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」 開頭的功能變數名稱是指與 Managed 編譯程式所產生的 CIL 模組對應的 Managed PDB(例如 C# 或 Visual Basic 編譯程式)。 此 PDB 會使用 Managed PDB 格式,並描述原始 Managed 原始程式碼中的專案,例如檔案、行號和符號名稱,如何對應至編譯至 CIL 模組的 CIL 元素。

  • 以 "NativePdb" 開頭的欄位名稱表示該 NGen PDB 是透過呼叫 NGEN createPDB而產生。 這個 PDB 會使用受管理的 PDB 格式,並描述各個項目如何從原始的受管理來源程式碼 (例如檔案、行號和符號名稱) 對應至編譯成 NGen 模組的原生項目。

CLR 定義域模組事件

下表說明關鍵字和層級。

引發事件的關鍵字 活動 層級
LoaderKeyword (0x8) DomainModuleLoad_V1 告知性 (4)
LoaderRundownKeyword (0x8) +

StartRundownKeyword
DomainModuleDCStart_V1 告知性 (4)
LoaderRundownKeyword (0x8) +

EndRundownKeyword
DomainModuleDCEnd_V1 告知性 (4)

下表說明事件資訊。

活動 事件識別碼 描述
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。

模組範圍事件

下表說明關鍵字和層級。

引發事件的關鍵字 活動 層級
PerfTrackKeyWord) ModuleRange 告知性 (4)
PerfTrackKeyWord ModuleRangeDCStart 告知性 (4)
PerfTrackKeyWord ModuleRangeDCEnd 告知性 (4)

下表說明事件資訊。

活動 事件識別碼 描述
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,用來代表非作用 IBC 範圍。 此欄位在未來可以代表更多值。
RangeSize1 win:UInt32 0 表示不正確的資料。
RangeBegin2 win:UnicodeString

備註

如果 .NET Framework 處理序中載入的 NGen 影像已使用 IBC 最佳化,則包含 NGen 影像中作用範圍的 ModuleRange 事件會與其 moduleIDClrInstanceID一起記錄。 如果 NGen 影像未經過 IBC 最佳化,則不會記錄這個事件。 若要判斷模組名稱,這個事件必須以模組載入 ETW 事件定序。

這個事件的承載大小是可變的, Count 欄位會指出事件中包含的範圍位移數。 這個事件必須以 Windows IStart 事件定序,以便判斷實際範圍。 每當載入影像時,就會記錄 Windows 影像載入事件,並且包含所載入影像的虛擬位址。

模組範圍事件會在任何 ETW 層級大於或等於 4 且分類為告知性事件時引發。

另請參閱