2010-07-16 27 views
1

我已經繼承了一個由三層代碼組成的項目。最低層是與硬件交互的本地C++。這是成熟的,穩定的和經過充分測試的。中級代碼是C++/CLI,它與包含UI元素和一些附加功能的頂級C#代碼進行交互。這個C#代碼是不完整的,並且在開發中被衝擊:它經常崩潰並且不適合用途。我的任務是調試並完成它。在Visual Studio 2008中調試多線程C# - C++/CLI - C++解決方案:這些線程是什麼?

我正在使用VS 2008來瀏覽多線程代碼,以瞭解該項目從哪裏開始。簡單的問題:在「線程」窗口中,我有兩個命名線程:一個與某些底層硬件(即C++代碼)和一個用戶界面線程通信的工作線程。

但是,單步執行代碼時,有相當多的工作線程沒有名稱,也沒有與它們關聯的調用堆棧,這些線程似乎是隨機出現的。它們在「調試位置」工具欄中沒有條目,並且在選中「在源中顯示線程」時,它們在代碼中看起來不可見。

他們是什麼,我應該關心他們嗎?它們看起來並不是來自本地代碼(因爲它使用Boost進行線程化,而且從調用堆棧中可以看出這一點)。凍結它們或改變它們的優先級似乎沒有效果。

我還沒有調試過這麼複雜的多線程代碼之前,所以任何意見非常讚賞!

回答

2

除了應用程序的線程外,.NET應用程序中還有其他一些應用程序。運行時使用專用線程運行終結器。正如driis指出的那樣,你也可能會看到線程池線程。調試器也會啓動一個線程。如果你使用vshost,你會得到相當的a bit of overhead an additional threads

相關問題