2009-04-12 35 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的更改將被文件系統鎖定,但在您的應用程序中,您可能正在做一些不尋常的事情。