我们开发了一个使用 TCP 和 UDP 套接字的网络库。 此 DLL 由测试客户端使用,该客户端在同一台 PC 上多次启动以进行负载测试。
在Windows Vista中,多次启动testclient是没有问题的。 在 Windows XP 中,最多启动 5 次没有问题,但如果我们启动它 6 次或更多次,然后关闭一个客户端,所有客户端都会崩溃,并出现明显随机的堆栈跟踪。
是的,虽然我们不使用任何进程间代码(仅客户端之间的套接字),但其中一个客户端的终止会导致所有客户端崩溃。
我们的 DLL 使用 MSVC 编译并使用 Boost 和 Crypto++ 库(静态链接)。
知道为什么不同的过程会相互影响吗?
最佳答案
我们需要更多的数据来诊断您的问题。但是,考虑到关闭一个客户端会使所有客户端崩溃,您需要考虑客户端相互影响的所有方式(进程间通信)。隐式或显式。所以我会先看看
- 当第 6 个客户端关闭时,服务器会做什么。它是否发送了其他 5 个客户端无法处理的特殊数据包?
- 您是否正在向文件系统读取或写入任何内容?
- 你使用共享内存吗?
但总的来说,我发现在 C++ 中出现看似随机的堆栈跟踪通常是由以下原因之一引起的
- 数据损坏
- 线程逻辑中的竞争条件。
关于c++ - 在 Windows XP 中多次启动程序 + DLL 时出现问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/741746/