【问题标题】:Howto debug Winsock API calls?如何调试 Winsock API 调用?
【发布时间】:2023-03-03 13:01:02
【问题描述】:

我在 Windows (Win7) 上有一个非常大的 C++ 服务器应用程序。它编译良好,运行良好,但有时 IP 连接失败。

我怀疑对 Winsock API 的某些调用获取了错误的参数,并且并非所有结果代码都得到了正确检查。

有没有办法跟踪对 Winsock API 的所有调用(包括参数),以便我可以检查它们是否存在连接失败?可能类似于 Linux 上的 strace ?

【问题讨论】:

    标签: c++ windows sockets windows-7 winsock


    【解决方案1】:

    由于您运行的是 Windows 7,因此您可以使用自 Vista 以来提供的 Winsock Tracing 工具。

    【讨论】:

    • 是否有任何工具可以使输出更具可读性? tracerpt.exe 会生成一个我无法理解的巨大 XML 报告。
    • 您应该能够追踪到事件查看器,这可能更具可读性。请参阅上面链接中的Using Event Viewer to Start Winsock Network Event Tracing 部分。
    • 我现在确实在 EventViewer 中获得了事件,谢谢!但是我有数百个事件,在 EventViewer 中,它们都被命名为“Winsock 网络事件”,您必须单击每个事件来查看它是什么。这似乎并不适合处理许多 API 调用。
    【解决方案2】:

    此应用程序提供完整的 API 调用跟踪检查此http://www.sstinc.com/winsock.html

    【讨论】:

    • TracePlus 没有为我提供一些重要 API 调用的参数值。有些只是列为“*”。是演示还是 TracePlus 无法跟踪这些?
    • 可能是因为演示。如果您需要免费工具,请使用apimonitor.com/?gclid=CJTEqJDhtawCFUMb6wodET9QGQ。它是免费的,并提供有价值的 api 调用
    • APIMonitor 的试用版也不显示所有参数值,例如。 listen() 的参数。
    • 您可以使用我们的 Deviare API 引擎:nektra.com/products/deviare-api-hook-windows。它有一个从 Microsoft Windows SDK 构建的带有函数参数的字典。如果您认为我们遗漏了某些内容,请在 forum.nektra.com 上留言,我们会为您纠正。使用 Deviare,您可以构建自己的自定义解决方案,而无需依赖特定的控制台。
    猜你喜欢
    • 2016-07-19
    • 1970-01-01
    • 2018-01-20
    • 1970-01-01
    • 2011-11-11
    • 2020-10-20
    • 2012-07-18
    • 2017-08-09
    • 1970-01-01
    相关资源
    最近更新 更多