2009-04-12 71 views
0

我们开发了一个使用TCP和UDP套接字的网络库。 该DLL由测试客户端使用,该客户端在同一台PC上多次启动以进行负载测试。在Windows XP中多次启动程序+ DLL的问题?

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

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

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

任何想法为什么不同的过程可能会相互影响?

+0

你试过调试关闭客户端关机吗?如果您单步关闭,您可能会发现崩溃的确切来源。为什么它会导致其他人崩溃是下一步。 – eran 2009-04-12 13:55:16

回答

0

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

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

与许多问题,这其中很可能是由要解决“只是调试它”

+0

特别是,尝试在调试器下运行至少两个客户端。当发生“随机”崩溃时,请查看当前所有线程正在访问的内存以及正在执行的代码。它与图书馆有关吗? – Arkadiy 2009-04-12 19:27:37

+0

事实上,它实际上是一个两次删除对象的bug,奇怪的是只有更多的客户端出现这个bug。谢谢。 – Tarnschaf 2009-04-15 08:55:16

1

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

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

虽然在一般,我已经发现,具有在C++中看似随机的堆栈跟踪是通过在穿线逻辑下面

  • 数据损坏
  • 争用条件的一个通常引起的。
0

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