故障转储中的套接字调查

问题描述 投票:0回答:2

我们有来自客户的故障转储(用户模式),该客户在我们的应用程序中遇到网络问题。在故障转储中,我可以看到所有为网络打开的句柄。

问题:如何调查与句柄关联的套接字?

Windbg !handle 命令不显示有关连接属性的信息。我是说 - 套接字状态 - 绑定/远程IP, - 绑定/远程端口
- 待处理的数据缓冲区(会很棒)等。

windows crash windbg winsock winsock2
2个回答
1
投票

套接字句柄是内核句柄(这就是为什么您可以向它们写入文件),仅使用用户模式转储,您无法从中获取任何信息。事实上,您询问的大多数信息(尤其是待处理的数据缓冲区)几乎肯定会在内核模式下进行管理。

如果您想保留此信息,则必须对应用程序进行检测以将套接字创建参数保存在用户模式内存中。


0
投票

10年后...

但是对于基于 C# 的套接字泄漏 -

将转储加载到 Windbg 中并运行

  • !analyze -v(可能不需要)
  • 运行 !dumpheap -stat 并找到套接字对象并将其打印到屏幕上。
  • 使用 !dumpobj /d [地址] 检查一些套接字对象。
  • 在每个对象中,您都会看到对象内的变量。
  • 我通过对端点对象旁边的值执行另一个 !dumpobj /d 进入 m_rightendpoint 对象。查看 m_tostring 变量 记忆。有一个命令,但我只是加载内存 窗口(在windbg预览中的视图选项卡上)并粘贴地址 该字符串的。您将在此处看到 IP 地址。
© www.soinside.com 2019 - 2024. All rights reserved.