0

我们开发了一个使用 TCP 和 UDP 套接字的网络库。此 DLL 由 testclient 使用,该客户端在同一台 PC 上多次启动以进行负载测试。

在 Windows Vista 中,多次启动 testclient 是没有问题的。在 Windows XP 中,启动它最多 5 次是没有问题的,但是如果我们启动它 6 次或更多,然后关闭一个客户端,它们都会崩溃并带有明显的随机堆栈跟踪。

是的,虽然我们不使用任何进程间代码(仅客户端之间的套接字),但其中一个客户端的终止会导致所有客户端的崩溃。

我们的 DLL 使用 MSVC 编译并使用 Boost 和 Crypto++ 库(静态链接)。

知道为什么不同的过程会相互影响吗?

4

3 回答 3

1

我们需要更多数据来诊断您的问题。但是考虑到关闭一个客户端会使所有客户端崩溃,您需要考虑客户端可以相互影响的所有方式(进程间通信)。无论是隐含的还是明确的。所以我会先看看

  • 当第 6 个客户端关闭时,服务器会做什么。它是否发出了其他 5 个客户端无法处理的特殊数据包?
  • 您是否正在向文件系统读取或写入任何内容?
  • 你使用共享内存吗?

但总的来说,我发现 C++ 中看似随机的堆栈跟踪通常是由以下原因之一引起的

  • 数据损坏
  • 线程逻辑中的竞争条件。
于 2009-04-12T13:33:45.760 回答
0

一个想法:你有一些错误。

说真的,如果没有任何信息,就无法知道您的问题是什么。
当一个进程崩溃时,它通常有一个很好的理由这样做。找出那是什么。在调试中编译您的 dll 和可执行文件,附加调试器并了解您获得的堆栈跟踪。如果你得到一个无意义的堆栈跟踪,找出原因。

与许多问题一样,这个问题很可能通过“仅调试它”来解决

于 2009-04-12T13:19:17.930 回答
0

修改 DLL 或锁定 DLL 可能会导致依赖它的程序崩溃。通常,对 DLL 的更改将被文件系统锁定,但在您的应用程序中,您可能正在做一些不寻常的事情。

于 2009-04-12T14:39:35.540 回答