确认:我可以在保持 TCP 套接字打开的同时调试应用程序吗?

Posted

技术标签:

【中文标题】确认:我可以在保持 TCP 套接字打开的同时调试应用程序吗?【英文标题】:Confirmation: can I debug an application while keeping a TCP socket open? 【发布时间】:2021-12-02 21:48:25 【问题描述】:

这个问题只是一个确认问题:

我正在开发一个基于 TCP 套接字的多线程 C# 应用程序。 连接看起来不稳定:连接会在一段时间后断开。我目前正在使用 Visual Studio 使用断点和单步执行相当多的测试。我想确定不稳定的连接不仅仅是因为我正在调试我的应用程序,因此这个确认问题:

打断点并执行一些单步操作会导致 TCP 套接字连接失败吗?

【问题讨论】:

如果没有数据被发送或接收,那么不会,因为 TCP 就是为此而设计的。但是很多TCP应用都实现了某种形式的keepalive机制,如果应用挂起,如果没有收到响应,连接就会中断。同样,如果您在发送数据后立即挂起应用程序,则连接可能会中断,因为无法确认任何数据包。 @JeroenMostert: ... 正是这种 Keep-Alive 机制导致通信从另一端中断。这些 Keep-Alive 消息是由我的应用程序中的另一个线程来回发送的,因此我相信设置仅中断当前线程但让其他线程运行的断点会很有用,这在 Visual Studio 2017 中是否可行?跨度> 根据文档,是的,通过conditional breakpoint。但我很确定它实际描述的仍然是调试器在断点被击中时挂起所有线程的常见场景(当你恢复时只有多个线程在运行);我认为没有一种模式可以选择性地恢复线程。 【参考方案1】:

您可以使用Tracepoints 之类的东西根据表达式/条件动态打印信息。这些不会阻塞当前正在执行的线程,所以应该适用于这样的事情。

【讨论】:

以上是关于确认:我可以在保持 TCP 套接字打开的同时调试应用程序吗?的主要内容,如果未能解决你的问题,请参考以下文章

Ada 和 Python 之间的 TCP 套接字

HTTP TCP 和 WEB 套接字

无限确认循环

Erlang同时连接1M客户端

即使在出厂重置后也保持 USB 调试开启,同时绕过 RSA 密钥

如何控制对等端的套接字[TCP打孔]