c++ - 在 Windows XP 中多次启动程序 + DLL 时出现问题?

标签 c++ dll crash visual-c++ interprocess

我们开发了一个使用 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/

相关文章:

c++ - 通过 winsock2 发送 uchar*

C++/OpenGL随机分割错误

c++ - For-Loop a "Empty"Vector with negative iterator?

java - 使用 eclipse 在 java 中使用 native 库

c++ - 使用 Qt 在 OS X/Mac 上构建 C++ 库

c - 程序因函数原型(prototype)声明而崩溃

xcode - LLDB 导致 Xcode 5.1 在项目运行时崩溃

java - Java 和 C++ 的互操作性

c# - 从 C# 中的 Rust DLL 获取 UTF-8 编码的字符串

ios - 应用仅在连接到 XCode 时崩溃