デバッグおよびトレース機能

Windows Sockets 2 アプリケーション開発者は、次のバグを分離する必要があります。

  • アプリケーション。
  • Ws2_32.dllまたは互換性 shim DLL の 1 つ。
  • サービス プロバイダー。

Windows ソケット 2 では、次のいくつかのコンポーネントと機能を使用して、このニーズに対応しています。

  • Windows Vista 以降での Winsock トレースの統合サポート。
  • Windows Vista 上の Ws2_32.dll の特別に考案されたデバッグ バージョン。
  • Windows Server 2003 および Windows XP で使用するための個別のプリミティブ デバッグおよびトレース機能。

Windows のイベント トレースを使用した Winsock Tracing

Windows イベント トレーシング (ETW) を使用した Winsock トレースの統合サポートは、Windows Vista 以降に含まれています。 これは、Windows Vista 以降で Winsock 呼び出しをトレースするために推奨される方法です。 ETW を使用した Winsock トレースは軽量であり、Windows の製品版で動作します。 追加のソフトウェアやコンポーネントは必要ありません。 この機能は、Windows Vista 以降で有効にする必要があります。 詳細については、 Winsock Tracing のトピックを参照してください。

Ws2_32.dllのデバッグ バージョンの使用

Windows Vista 上の Ws2_32.dll と Winsock トレースのデバッグ バージョンを組み合わせることで、Windows ソケット 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 Tracing