共用方式為


逐步解說:偵錯多執行緒應用程式

更新:2007 年 11 月

這個主題適用於:

版本

Visual Basic

C#

C++

Web Developer

Express 版

標題不適用於 標題不適用於 標題適用於 標題不適用於

Standard 版

標題適用於 標題適用於 標題適用於 標題適用於

Pro/Team 版

標題適用於 標題適用於 標題適用於 標題適用於

表格圖例:

標題適用於

套用

標題不適用於

不套用

預設會套用主題但隱藏命令

預設隱藏的命令。

Visual Studio 2008 改進了 [執行緒] 視窗以及其他使用者介面,更容易進行多執行緒應用程式的偵錯。只需花幾分鐘完成這份逐步解說,您便能更熟悉對多執行緒應用程式偵錯時的新介面功能。

開始本逐步解說之前,您需要一個多執行緒應用程式。請依照下列步驟建立專案。

若要建立逐步解說專案

  1. 在 [檔案] 功能表上,選擇 [新增],然後按一下 [專案]。

    [新增專案] 對話方塊隨即出現。

  2. 在 [專案類型] 方塊中按一下您所要的程式語言:[Visual Basic]、[Visual C#] 或 [Visual C++]。

  3. 在 [範本] 方塊中選擇 [主控台應用程式] 或 [CLR 主控台應用程式]。

  4. 在 [名稱] 方塊中,輸入名稱 [ MyThreadWalkthroughApp]。

  5. 按一下 [確定]。

    新的主控台專案隨即出現。專案建立之後,便會出現原始程式檔 (Source File)。根據您所選擇的語言,原始程式檔的名稱可能是 Module1.vb、Program.cs 或 MyThreadWalkthroughApp.cpp

  6. 刪除出現在原始程式檔中的程式碼,並且以出現在建立執行緒並在啟動時間傳遞資料主題之<建立執行緒>一節中的範例程式碼來取代。

  7. 在 [檔案] 功能表上按一下 [全部儲存]。

若要開始逐步解說

  • 在來源視窗中,尋找下列程式碼:

    Thread.Sleep(3000) 
    Console.WriteLine(
    
Thread.Sleep(3000);
Console.WriteLine();
Thread::Sleep(3000);
Console.WriteLine();

若要啟動偵錯

  1. 以滑鼠右鍵按一下 Console.WriteLine 陳述式,指向 [中斷點],然後按一下 [插入中斷點]。

    來源視窗左邊的裝訂邊中會出現紅色圓球。這表示這個位置現在已設定中斷點。

  2. 在 [偵錯] 功能表上按一下 [啟動偵錯]。

    偵錯作業啟動,您的主控台應用程式 (Console Application) 開始執行,然後在中斷點停止。

  3. 如果目前焦點在主控台應用程式視窗上,請按一下 Visual Studio 視窗將焦點還給 Visual Studio。

  4. 在來源視窗中,尋找包含下列程式碼的那一行:

    Thread.Sleep(5000) 
    
Thread.Sleep(3000);
Thread::Sleep(3000);

若要尋找執行緒標記

  1. 查看來源視窗左邊的裝訂邊。在這條線上,您會看見有個像是兩條布條的圖示。其中一條是紅色、另一條是藍色。執行緒標記表示執行緒會停在這個位置上。執行緒可能會停在這個位置上。

  2. 將指標移到執行緒標記上。資料提示方塊隨即出現。資料提示方塊會指出每個已停止的執行緒的名稱和執行緒 ID 編號。此案例中只有一個執行緒,其名稱可能為 <noname>。

  3. 以滑鼠右鍵按一下執行緒標記。請注意快速鍵功能表上的選項。

這個圖示是「執行緒標記」(Thread Marker):

執行緒標記

將執行緒加上旗標和取消旗標

在 Visual Studio 2008 中,您可以為需要特別注意的執行緒加上旗標。為執行緒加上旗標可方便您追蹤重要的執行緒,而忽略您無需注意的執行緒。

若要為執行緒加上旗標

  1. 在 [檢視] 功能表上,指向 [工具列]。

    確定已選取 [偵錯位置] 工具列。

  2. 移至 [偵錯位置] 工具列,並按一下 [執行緒] 清單。

    注意事項:

    您可以藉由三個明顯的清單辨認出這個工具列:[處理序]、[執行緒] 和 [堆疊框架]。

  3. 注意清單中出現的執行緒數。

  4. 返回來源視窗,再次以滑鼠右鍵按一下 [執行緒] 標記。

  5. 在快速鍵功能表上,按一下 [旗標],然後按一下執行緒名稱和 ID 編號。

  6. 返回 [偵錯位置] 工具列,並按一下 [執行緒] 清單。

    現在清單中只會出現加上旗標的執行緒。旗標按鈕就位於 [執行緒] 清單的右側。按鈕上的旗標圖示先前呈現暗灰色。現在成為亮紅色。

  7. 將指標移到旗標圖示上。

    快顯視窗隨即出現。這個快顯視窗會指出 [執行緒] 清單所處的模式:[僅顯示有旗標的執行緒]。

  8. 按一下旗標按鈕切換回 [顯示所有執行緒] 模式。

  9. 再按一下 [執行緒] 清單,確認您現在又可看見所有執行緒。

  10. 按一下旗標按鈕,切換回 [僅顯示有旗標的執行緒]。

  11. 在 [偵錯] 功能表上,指向 [視窗],然後按一下 [執行緒]。

    [執行緒] 視窗隨即出現。每個執行緒都附有一個明顯的旗標圖示。

  12. 在來源視窗中,再次以滑鼠右鍵按一下執行緒標記。

    請注意快速鍵功能表上目前可用的選項。您現在會看到 [取消旗標],而不是 [旗標]。請不要點選 [取消旗標]。

  13. 進入關於如何取消執行緒之旗標的下一個程序。

若要取消執行緒的旗標

  1. 在 [執行緒] 視窗中,以滑鼠右鍵按一下加上旗標的執行緒所對應的一行。

    快速鍵功能表即會顯示。其中包含 [取消旗標] 和 [取消所有旗標] 兩個選項。

  2. 若要取消執行緒的旗標,請按一下 [取消旗標]。

  3. 按一下紅色旗標圖示。

  4. 再次查看 [偵錯位置] 工具列。旗標按鈕再次呈現為暗灰色。您已將唯一有旗標的執行緒取消旗標。由於沒有已加上旗標的執行緒,工具列回到 [顯示所有執行緒] 模式。按一下 [執行緒] 清單,確認您可看見所有執行緒。

  5. 返回 [執行緒] 視窗,並查看資訊欄。

    每欄頂端的按鈕大都有用來識別該欄的標題。但左側的第一欄沒有標題。但它具有圖示,這個圖示為旗標的外框。您會在執行緒清單的每一列注意到同樣的外框。這個外框表示這個執行緒已經取消旗標了。

  6. 分別按一下兩個執行緒 (清單底端倒數第二和第三個) 的外框。

    旗標圖示會成為紅色,而非空心的外框。

  7. 按一下旗標欄位頂端的按鈕。

    按一下這個按鈕,執行緒清單的順序就會變更。執行緒清單現在的排序是將加上旗標的執行緒列於最上方。

  8. 再按一下旗標欄位頂端的按鈕。

    排序順序會再次變更。

執行緒視窗的相關資訊

若要進一步了解執行緒視窗

  1. 在 [執行緒] 視窗中,查看左邊算來第三個欄位。這個欄位頂端的按鈕文字是 [ID]。

  2. 按一下 [ID]。

    執行緒清單現在會依照執行緒 ID 編號排序。

  3. 以滑鼠右鍵按一下清單中任一個執行緒。在快速鍵功能表上按一下 [十六進位顯示]。

    執行緒 ID 編號的格式即會變更。

  4. 將滑鼠指標移到清單中的任一執行緒上。

    稍等一下,資料提示方塊就會出現。它會顯示執行緒的部分呼叫堆疊。

  5. 查看左邊算來第四個欄位,這個欄位已加上 [分類] 標籤。執行緒已分到這些類別中。

    處理序中第一個建立的執行緒稱為主執行緒。請在執行緒清單中找出這個執行緒。

  6. 以滑鼠右鍵按一下主執行緒,然後按一下 [切換至執行緒]。

    警告對話方塊隨即出現。警告中指出 Visual Studio 無法顯示主執行緒的原始程式碼。

    按一下 [確定]。

  7. 查看 [呼叫堆疊] 視窗和 [偵錯位置] 工具列。

    [呼叫堆疊] 視窗的內容已變更。此外在 [偵錯位置] 工具列上,[執行緒] 和 [堆疊框架] 方塊的內容皆會以紅色顯示。這表示其內容最近有所變更。

切換使用中執行緒

若要切換執行緒

  1. 在 [執行緒] 視窗中,查看左邊算來第二個欄位。這個欄位頂端的按鈕沒有文字或圖示。這個欄位是 [使用中執行緒] 欄位。

  2. 查看 [使用中執行緒] 欄位,並注意其中一個執行緒具有黃色箭號。這是「使用中執行緒指示器」。

  3. 記下使用中執行緒指示器所在的執行緒 ID 編號。您會將使用中執行緒指示器移至其他執行緒,但您必須在完成作業後將其放回。

  4. 以滑鼠右鍵按一下另一個執行緒,然後按一下 [切換至執行緒]。

  5. 查看來源視窗中的 [呼叫堆疊] 視窗。內容已有所變更。

  6. 查看 [偵錯位置] 工具列。使用中執行緒也已變更。

  7. 移至 [偵錯位置] 工具列。按一下 [執行緒] 方塊,然後從下拉式清單 (Drop-Down List) 中選擇不同的執行緒。

  8. 查看 [執行緒] 視窗。使用中執行緒指示器已有所變更。

  9. 在來源視窗中,以滑鼠右鍵按一下執行緒標記。在快速鍵功能表上,指向 [切換至],然後按一下執行緒名稱/ID 編號。

    您現在已了解三種可變更使用中執行緒的方法:使用 [執行緒] 視窗、[偵錯位置] 工具列的 [執行緒] 方塊,以及來源視窗中的執行緒指示器。

    使用執行緒指示器時,您只能切換到停止在特定位置的執行緒。使用 [執行緒] 視窗和 [偵錯位置] 工具列時,則可以切換至任何執行緒。

凍結和解除凍結執行緒的執行

若要凍結和解除凍結執行緒

  1. 在 [執行緒] 視窗中,以滑鼠右鍵按一下任何執行緒,然後按一下 [凍結]。

  2. 查看使用中執行緒欄位。該處現在會出現一對垂直列。這兩條藍色列表示該執行緒已遭凍結。

  3. 查看 [暫止] 欄位。執行緒的暫停次數 (Suspend Count) 現在是 1。

  4. 以滑鼠右鍵按一下凍結的執行緒,然後按一下 [解除凍結]。

    使用中執行緒欄位和 [暫止] 欄位即會變更。

請參閱

工作

HOW TO:在偵錯時切換到另一個執行緒

其他資源

偵錯多執行緒應用程式