2014-03-04 111 views
0

我可以重現我的多線程控制檯應用程序掛起在Thread.Join()的情況。多線程應用程序掛在Thread.Join()

我該如何實時調試並找出哪個線程正在掛起?有什麼方法可以使用?

+2

這是你加入的任何線程。其他線程可能是什麼? – Servy

+0

我加入的每個線程都在它終止前打印語句,但由於某種原因線程不會終止。我想也許線程不正確地釋放資源。 – burnt1ce

回答

3

如果你有一堆的線程和你調用一個循環加入對每不知道哪一個掛着你,幾件事情可以做:

  1. 線程可以命名。在創建時命名線程,然後在調用Join之前編寫要加入的線程的名稱(以調試消息或控制檯窗口)。這將通過名稱告訴你哪個線程。
  2. 您可以嘗試附加調試程序來處理,中斷執行,然後查看哪些線程以及它們位於何處。
  3. 線程函數中的一般跟蹤消息。
+0

你也可以抓取一個內存轉儲,並在windbg中執行'〜* e!clrstack'並加載SOS擴展,看看是否有任何堆棧提示無限循環或者是否有任何線程在等待同步機制 –

+0

謝謝!我找到了懸掛的線程。它掛在web服務電話上。 – burnt1ce

相關問題