在Windows XP中多次启动程序+ DLL的问题?

时间:2009-04-12 13:11:59

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

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

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

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

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

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

3 个答案:

答案 0 :(得分:1)

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

开始
  • 当第6个客户端关闭时,服务器会执行什么操作。它是否发送了其他5个客户端无法处理的特殊数据包?
  • 您是在阅读还是写任何文件系统?
  • 您使用共享内存吗?

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

  • 数据损坏
  • 线程逻辑中的竞争条件。

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

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