调试和跟踪设施

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 跟踪的集成支持 (ETW) 。 这是在 Windows Vista 及更高版本上跟踪 Winsock 调用的首选方法。 使用 ETW 的 Winsock 跟踪是轻量级的,适用于 Windows 的零售版本。 不需要其他软件或组件。 只需在 Windows Vista 及更高版本上启用此功能。 有关更多详细信息,请参阅 Winsock 跟踪 主题。

使用 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 7 的 Windows SDK 安装到默认位置,则会在以下文件夹中安装此基元 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 跟踪