2011-01-26 40 views
1

道歉 - 我不是合適的人選要解決這個問題,但今天有一個大的暴風雪,只有實習生(我)是夠瘋狂的進來我球隊。跟蹤線程,因爲他們提前催生

保持簡單 - 我有一個應用程序,在重複執行某個任務(反序列化文件並根據數據進行某些調用)後約115次,其中有幾個其他任務會導致應用程序崩潰。所有這些可能導致應用程序崩潰的操作都涉及到顯示新窗口。

我最好的猜測(從Windows任務管理器線程數盯着我反覆點擊囊括)是我們沒有處置線程的正確。公式似乎是每次加載文件時出現的4個線程(實際上創建的更多,大多數都會消失)。我想知道是否可以通過代碼逐步完成並觀察過程進行時的線程數量。現在我真的不知道什麼時候或者在哪裏開始線程,但是如果我這樣做了,我可以遵循他們的邏輯並確保它們不會不必要地繼續運行。

謝謝!

+0

當代碼停止時,線程將消失。您可以使用調試器跟蹤線程,但似乎不太可能會幫助您。 – 2011-01-26 19:28:50

+0

任何你不使用ThreadPool的理由?根據你所說的話,這將消除這個問題。重用線程比持續創建/處理它們更好(即使它們的處理正確)。 – 2011-01-26 19:40:55

回答

0

如果你有機會到在每個線程中運行的方法(S)的來源,那麼你可以插入追加到一個列表,你可以在調試器中查看或轉儲到一個文件中的一些跟蹤語句瞭解線程執行順序。鎖定List以保持執行順序。

1

您可以看到使用的IntelliTrace所有應用程序的線程。 只要你想暫停它,你可以看到每個正在運行的線程的調用堆棧。

1

我認爲最有可能的是,你從創建一個後臺線程的新形式或訪問形式/控制。

要調試的問題,請訂閱以下事件

AppDomain.UnhandledExceptionApplication.ThreadException

AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException); 
Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException); 

將斷點在每個事件處理程序,並鎖定了在事件參數異常的堆棧跟蹤。