代码之家  ›  专栏  ›  技术社区  ›  Tarnschaf

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

  •  0
  • Tarnschaf  · 技术社区  · 17 年前

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

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

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

    我们的dll是用msvc编译的,使用boost和crypto++libs(静态链接)。

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

    3 回复  |  直到 17 年前
        1
  •  0
  •   shoosh    17 年前

    一个主意:你有一些虫子。

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

    和许多问题一样,这个问题很可能通过 “只是调试它”

        2
  •  1
  •   JaredPar    17 年前

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

    • 当第6个客户机关闭时,服务器会做什么?它是否发送了其他5个客户无法处理的特殊数据包?
    • 你在读或写文件系统的东西吗?
    • 你使用共享内存吗?

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

    • 数据损坏
    • 线程逻辑中的争用条件。
        3
  •  0
  •   sep    17 年前

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

    推荐文章