共用方式為


關於事件追蹤

Windows 事件追蹤 (ETW) 是一個有效率的核心層級追蹤功能,可讓您將核心或應用程式定義的事件記錄到記錄檔。 您可以即時或從記錄檔取用事件,並使用它們來偵錯應用程式,或判斷應用程式發生效能問題的位置。

ETW 可讓您動態啟用或停用事件追蹤,讓您在生產環境中執行詳細的追蹤,而不需要重新啟動電腦或應用程式。

事件追蹤 API 分成三個不同的元件:

下圖顯示事件追蹤模型。

事件追蹤模型

控制器

控制器是定義記錄檔大小和位置的應用程式,啟動和停止 事件追蹤會話、啟用提供者以便將事件記錄到會話、管理緩衝池的大小,以及取得會話的執行統計數據。 會話統計數據包括使用的緩衝區數目、傳遞的緩衝區數目,以及遺失的事件和緩衝區數目。

如需詳細資訊,請參閱 控制事件追蹤會話

供應商

提供者是包含事件追蹤工具的應用程式。 在提供者自行註冊之後,控制器就可以在提供者中啟用或停用事件追蹤。 提供者會定義其啟用或停用的詮釋。 一般而言,啟用的提供者會產生事件,而停用的提供者則不會產生事件。 這可讓您將事件追蹤新增至應用程式,而不需要一直產生事件。

雖然 ETW 模型會將控制器和提供者分成不同的應用程式,但應用程式可以包含這兩個元件。

如需詳細資訊,請參閱 提供事件

提供者類型

提供者有四種主要類型:MOF(傳統)提供者、WPP 提供者、指令清單型提供者和 TraceLogging 提供者。 如果您要撰寫 Windows Vista 或更新版本的應用程式,而不需要支援舊版系統,您應該使用指令清單型提供者或 TraceLogging 提供者。

MOF(傳統)供應商:

  • 使用 RegisterTraceGuidsTraceEvent 函式來註冊和寫入事件。
  • 使用MOF類別來定義事件,讓取用者知道如何取用它們。
  • 一次只能啟用一個追蹤會話。

WPP 提供者:

  • 使用 RegisterTraceGuidsTraceEvent 函式來註冊和寫入事件。
  • 具有相關聯的 TMF 文件(編譯到二進位檔的 .pdb)中,包含從預處理器掃描原始碼中的 WPP 工具推斷出的解碼資訊。
  • 一次只能啟用一個追蹤會話。

以指令清單為基礎的提供者:

  • 使用 EventRegisterEventWrite 來註冊和寫入事件。
  • 使用指令清單來定義事件,讓取用者知道如何取用它們。
  • 最多可以同時啟用八個追蹤會話。

TraceLogging 提供者:

  • 使用 TraceLoggingRegisterTraceLoggingWrite 來註冊和寫入事件。
  • 使用自我描述事件,使事件本身包含所有取用所需的資訊。
  • 最多可以同時啟用八個追蹤會話。

所有事件提供者基本上都使用事件追蹤 API 系列(TraceEvent 用於舊版技術,而 EventWrite/EventWriteEx 用於較新的技術)。 事件提供者只會在事件承載中儲存的欄位類型,以及儲存相關聯事件譯碼資訊的位置而有所不同。

消費者

消費者是選取一個或多個事件追蹤會話作為事件來源的應用程式。 消費者可以同時從多個事件追蹤會話中請求事件,系統會按時間順序傳遞這些事件。 消費者可以接收儲存在記錄檔中的事件,或從即時傳遞事件的會話中接收事件。 處理事件時,取用者可以指定開始和結束時間,而且只會傳遞指定時間範圍內發生的事件。

如需詳細資訊,請參閱 取用事件

遺漏事件

Perfmon、系統診斷和其他系統工具可能會報告事件記錄檔中的遺漏事件,並指出 Windows 事件追蹤的設定可能不是最佳設定。 事件可能會因為許多原因而遺失:

  • 事件大小總計大於 64K。 這包括 ETW 標頭加上數據或有效負載。 用戶無法控制這些遺漏的事件,因為事件大小是由應用程式所設定。

  • ETW 緩衝區大小小於事件大小總計。 用戶無法控制這些遺漏事件,因為事件大小是由記錄事件的應用程式所設定。

  • 針對實時記錄,如果即時消費者未能以足夠的速度消耗事件或完全不在場,那麼備份檔案將會被填滿。 如果事件記錄檔服務已停止,並在記錄事件時啟動,則這可能會導致此狀況。 用戶無法控制這些遺漏事件。

  • 當記錄到檔案時,磁碟的速度太慢,無法跟上記錄速度。

基於上述任何原因,請將這些問題回報給產生事件的應用程式或服務提供者。 這些問題只能由應用程式開發人員或服務記錄事件來修正。 如果在事件記錄服務中報告遺漏的事件,這可能表示事件記錄檔服務的設定發生問題。 使用者可能會有一些有限的能力來增加事件記錄服務所使用的磁碟空間上限,這可能會減少遺漏事件的數目。