Visual Studio調試器指南---Threads窗口


大多數的應用程序都使用多線程技術。對應Windows應用程序,為了能夠使用戶界面保持快速響應,經常需要把費時的任務放在與主應用程序獨立的線程上運行。此時,多個線程的並發執行調試變得很困難,特別是在多個線程訪問同一個類和方法時。Threads能夠幫助我們減輕復雜度。

打開窗口

一般來說當程序遇到斷點進入調試模式,會自動打開Threads窗口,如果沒有,我們可以通過下面的方式打開:

  • 通過菜單欄打開
  • 通過快捷鍵
    Ctrl+Alt+H

窗口的使用

線程窗口包含其中每行描述一個單獨的線程在應用程序中的表。 默認情況下,該表列出應用程序中的所有線程,但可以篩選列表以僅顯示感興趣的線程。 每個列說明了不同類型的信息。 您還可以隱藏某些列。 如果顯示所有列,顯示以下各列,從左到右:

  • 標志:在此未標記的專欄中,可以標記要特別注意的線程。 有關如何標記一個線程的信息,請參閱如何:標記線程和取消標記線程。

  • 當前線程:在此未標記的列,黃色箭頭指示當前線程。 概述箭頭指示非當前線程的當前調試器上下文。

  • ID:顯示每個線程的標識號。

  • 托管 ID:顯示托管線程的托管的標識號。

  • 類別:顯示為用戶界面線程、 遠程過程調用處理程序或工作線程的線程的類別。 一個特殊類別標識應用程序的主線程。

  • 名稱:如果有的話,或按名稱標識每個線程<無名稱 >。

  • 位置:顯示線程正在其中運行。 可以展開此位置以顯示線程的完整調用堆棧。

  • 優先級:(默認情況下隱藏) 的高級的列,顯示系統已分配給每個線程的優先級。

  • 關聯掩碼:高級的列 (默認情況下隱藏),顯示了每個線程的處理器關聯掩碼。 在多處理器系統中,關聯掩碼確定線程可以在哪些處理器上運行。

  • 掛起項計數:高級的列 (默認情況下隱藏),顯示掛起項計數。 此計數確定線程是否可以運行。 

  • 進程名稱:(默認情況下隱藏) 的高級的列,顯示每個線程所屬的進程。 在調試多個進程時,此列中的數據很有用。

  • 進程 ID:(默認情況下隱藏) 的高級的列,顯示每個線程所屬的進程 ID。

  • 傳輸限定符:高級的列 (默認情況下隱藏) 唯一標識調試器連接到的計算機。

在頂部的工具欄線程窗口中,選擇然后,選中或清除要顯示或隱藏的列的名稱。

在“線程”窗口中,可以用圖標標記來標記要格外關注的線程 。 在“線程”窗口中,可以選擇顯示所有線程或僅顯示標記的線程 。

當凍結線程時,系統不會啟動線程的執行,即使提供了資源。在本機代碼中,您可以掛起或繼續線程通過調用 Windows 函數SuspendThreadResumeThread或者,致電 MFC 函數CWinThread::SuspendThread並cwinthread:: Resumethread。 如果您調用SuspendThreadResumeThread,則掛起項計數中所示線程窗口將會更改。 如果凍結或解凍本機線程不會更改掛起項計數。 線程不能在本機代碼中執行,除非它線程解凍並且其掛起項計數為零。在托管代碼中,當凍結或解凍線程時,將更改掛起項計數。 如果在托管代碼中凍結線程,其掛起項計數為 1。 當本機代碼中凍結線程時,其掛起項計數為 0,除非使用SuspendThread調用。

在頂部的工具欄線程窗口中,選擇凍結線程解凍線程此操作僅影響在“線程”窗口中選中的線程 。

 

黃色箭頭指示當前線程 (和執行指針的位置)。 帶有卷尾的綠色箭頭指示非當前線程具有當前的調試器上下文。

若要切換到另一個線程請按照以下步驟之一操作:

  • 雙擊任一線程。

  • 右擊一個線程,然后選擇切換到線程

分組線程時,表中將顯示每組的標題。 標題包含組說明(如“輔助線程”或“未標記的線程”)和樹控件 。 每組的成員線程顯示在組標題下。 如果你想要隱藏組的成員線程,使用樹控件折疊組。

因為分組優先於排序,所以您可以先按類別(以此為例)分組線程,再按每個類別中的 ID 對其進行排序。

排序線程

  1. 在頂部的工具欄線程窗口中,選擇任意列頂部的按鈕。

    線程現在按該列中的值進行排序。

  2. 如果你想要反轉排序順序,請再次選擇相同的按鈕。

    在列表頂部顯示的線程現在顯示在底部。

分組線程

  • 在中線程窗口工具欄中,選擇分組依據列表,然后選擇要分組線程所依據的條件。

對組內線程排序

  1. 在頂部的工具欄線程窗口中,選擇分組依據列表,然后選擇要分組線程所依據的條件。

  2. 在中線程窗口中,選擇任意列頂部的按鈕。

    線程現在按該列中的值進行排序。

展開或折疊所有組

在頂部的工具欄線程窗口中,選擇展開組折疊組

 

您可以搜索匹配的指定的字符串中的線程線程窗口。 在搜索線程時,窗口將顯示匹配的任何列中的搜索字符串的所有線程。 信息包括在“位置”列中調用堆棧頂部顯示的線程位置 。 默認情況下,不搜索整個調用堆棧。

搜索特定線程

  1. 在“線程”窗口頂部的工具欄中,轉到“搜索”框,執行下列操作之一 :

    • 輸入搜索字符串,然后按Enter

    - 或 -

    • 選擇下拉列表旁邊搜索框並選擇上一次搜索的搜索字符串。
  2. (可選)若要在搜索中包括整個調用堆棧,請選擇“搜索調用堆棧” 。



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM