共用方式為


偵錯和追蹤設施

Windows Sockets 2 應用程式開發人員必須在下列項目中隔離 Bug:

  • 應用程式。
  • Ws2_32.dll 或其中一個相容性填充碼 DLL。
  • 服務提供者。

Windows Sockets 2 可透過數個元件和功能來解決這項需求:

  • Windows Vista 和更新版本上 Winsock 追蹤的整合支援。
  • Windows Vista 上特別設計的 Ws2_32.dll 偵錯版本。
  • 用於 Windows Server 2003 和 Windows XP 的不同基本偵錯和追蹤設施。

使用 Windows 事件追蹤的 Winsock 追蹤

Windows Vista 和更新版本包含使用 Windows 事件追蹤的 Winsock 追蹤整合式支援。 這是追蹤 Windows Vista 和更新版本上 Winsock 呼叫的慣用方法。 使用 ETW 的 Winsock 追蹤是輕量型的,適用於 Windows 的零售版本。 不需要額外的軟體或元件。 此功能只需要在 Windows Vista 和更新版本上啟用。 如需詳細資訊,請參閱 Winsock 追蹤 主題。

使用偵錯版本的 Ws2_32.dll

Windows Vista 和 Winsock 追蹤上 Ws2_32.dll 偵錯版本的組合,可監視 Windows Sockets 2 API 或 SPI 的所有過程調用,並在某種程度上受到控制。

如果將適用於 Windows Vista 的 Microsoft Windows 軟體開發工具包 (SDK) 版本安裝到預設位置,則各種架構的偵錯版本 Ws2_32.dll 會位於下列資料夾底下:

C:\Program Files\Microsoft SDKs\Windows\v6.0\NoRedist

應使用符合您所測試 Windows 版本和 Service Pack 版本的已核取版本 Ws2_32.dll。 請注意,安全性修補程式可能已套用,以更新測試系統上的 Ws2_32.dll。 適用於 Windows Vista 的 Windows SDK 和舊版平臺軟體開發工具套件 (SDK) DVD/CD 訂用帳戶包含各種 Windows 版本的已檢查組建。 您應該使用與所測試系統上所使用的零售版相同的已核取版本 Ws2_32.dll。 另請注意,在核取的組建下執行的行為,與使用零售組建執行的行為不同。

注意 Windows Server 2008 和更新版本的 Windows SDK 不再包含 Ws2_32.dll的特殊偵錯版本。 開發人員應該改用 ETW 的 Winsock 追蹤,因為這項功能不需要偵錯組建。

Windows Server 2003 和 Windows XP 上的 Winsock 偵錯和追蹤設施

Windows 8 和 Windows Server 2012 之前的舊版 Windows 支持個別的基本偵錯和追蹤功能,其隨附於 Windows SDK 和舊版平臺 SDK 的範例中。 偵錯/追蹤設施只應用於不支援 Winsock 追蹤的 Windows Server 2003 和 Windows XP。

如果 Windows SDK for Windows 7 安裝到預設位置,此基本 Winsock 追蹤功能會安裝在下列資料夾中:

C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\NetDs\winsock\dt_dll

此資料夾中的 DbgSpec.doc 檔案提供此基本追蹤設施的檔。 dt_dll資料夾中的範例程式代碼必須編譯為使用此設施。 開發人員可以使用原始程式碼來開發符合其特定需求的偵錯/追蹤 DLL 版本。

請注意,此基本 Winsock 追蹤功能只適用於安裝的偵錯版本 Ws2_32.dll。 因此,您必須取得符合所測試 Windows 版本和 Service Pack 的已核取版本 Ws2_32.dll

此基本dt_dll追蹤設施的限制是範例程式代碼會針對每個 Winsock 函數調用使用全域鎖定(重要區段)。 因此,這項設施在處理種族條件方面並無用處。 範例程式代碼需要大幅重寫,才能讓此追蹤設施在處理大部分真正的 Winsock 問題時很有用(取代全域鎖定)。 此範例程式代碼可讓開發人員追蹤過程調用、程式傳回、參數值和傳回值。

開發人員可以使用這個基本機制來追蹤過程調用、過程傳回、參數值和傳回值。 您可以在過程呼叫或過程傳回時改變參數值和傳回值。 如有需要,則可以防止或重新導向過程調用。 透過存取此層級的資訊和控制,開發人員更能夠隔離應用程式、Ws2_32.dll或服務提供者中的問題。

Winsock 追蹤