调试和跟踪设施

Windows 套接字 2 应用程序开发人员需要隔离以下 bug:

  • 应用程序。
  • Ws2_32.dll 或其中一个兼容性填充码 DLL。
  • 服务提供商。

Windows 套接字 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 套接字 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 跟踪