Visual Studio調試器指南---使用線程和進程


使用線程和進程是調試的重要組成部分。 Visual Studio 提供一個界面,在此界面中,可連接正在運行的待調試進程,可查看在那些進程中運行的附加進程和線程的有關信息,還可以控制正在調試的線程和進程的執行。

在計算機科學中,“線程”和“進程”是兩個相關的概念。 二者都表示必須按特定順序執行的指令序列。 但是不同線程或進程中的指令可以並行執行。

進程存在於操作系統內,並對應於用戶可看作為程序或應用程序的事物。 另一方面,線程存在於進程內。 因此,線程有時也稱作“輕量進程”。 每個進程都由一個或多個線程組成。

多個進程的存在使得計算機能夠一次執行多個任務。 而多個線程的存在使得進程能夠分解工作以便並行執行。 在多處理器計算機上,進程或線程可以在不同的處理器中運行。 這使得真正的並行處理成為可能。

並不總是能夠完全並行處理。 有時候必須要同步線程。 一個線程可能必須等待另一個線程的結果,或者一個線程可能需要獨占訪問另一個線程正在使用的資源。 同步問題是多線程應用程序中出現 Bug 的一個常見原因。 有時候線程可能最終等待的是永遠不會變得可用的資源。 這導致了一種稱為“死鎖”的狀況。

Visual Studio 調試器為調試線程和進程提供了功能強大但易於使用的工具。

線程和進程

在 Visual Studio 中用於處理進程的主要工具有“附加到進程”對話框、“進程”窗口和“調試位置”工具欄。 用於調試線程的主要工具有“線程”窗口、源窗口中的線程標記和“調試位置”工具欄。調試多線程應用程序的主要工具是“並行堆棧”和“並行任務”窗口。

下面的表顯示了可用信息以及可在以上每個位置執行的操作:

用戶界面

可用信息

可以執行的操作

“附加到進程”對話框

可以附加的可用進程:

  • 進程名 (.exe)

  • 進程 ID 號

  • 菜單欄標題

  • 類型(托管 v4.0;托管 v2.0、v1.1、v1.0;x86;x64;IA64)

  • 用戶名(帳戶名)

  • 會話號

選擇要附加的進程

選擇遠程計算機

更改用於連接遠程計算機的傳輸類型

“進程”窗口

附加的進程:

  • 進程名

  • 進程 ID 號

  • 進程 .exe 的路徑

  • 菜單欄標題

  • 狀態(中斷 運行)

  • 調試(本機、托管等。)

  • 傳輸類型(默認、無身份驗證時僅限本機)

  • 傳輸限定符(遠程計算機)

工具:

  • 附加

  • 分離

  • 終止

快捷菜單:

  • 附加

  • 分離

  • 調試停止時分離

  • 終止

“線程”窗口

當前進程中的線程:

  • 線程 ID

  • 托管 ID

  • 類別(主線程、接口線程、遠程過程調用處理程序或輔助線程)

  • 線程名

  • 創建線程的位置

  • 優先級

  • 關聯掩碼

  • 掛起項計數

  • 進程名

  • 標志指示器

  • 掛起指示器

工具:

  • 搜索

  • 搜索調用堆棧

  • 標記“僅我的代碼”

  • 標記自定義模塊選擇

  • 分組依據

  • Columns

  • 展開/折疊調用堆棧

  • 展開/折疊組

  • 凍結/解凍線程

快捷菜單:

  • 在源中顯示線程

  • 切換到線程

  • 凍結一個正在運行的線程

  • 解凍凍結的線程

  • 標記一個線程以便進一步研究

  • 取消標記一個線程

  • 重命名一個線程

  • 顯示和隱藏線程

其他操作:

  • 查看數據提示中一個線程的調用堆棧

源窗口

左側滾動條槽中的線程指示符指示單線程或多線程(默認情況下處於關閉狀態,可通過使用“線程”窗口中的快捷菜單打開)

快捷菜單:

  • 切換到線程

  • 標記一個線程以便進一步研究

  • 取消標記一個線程

“調試位置”工具欄

  • 當前進程

  • 當前線程

  • 當前堆棧幀

  • 切換到另一個進程

  • 切換到當前進程中的另一個線程

  • 切換到當前線程中的另一個堆棧幀

  • 標記或取消標記當前線程

  • 僅顯示標記的線程

“並行堆棧”窗口

  • 一個窗口中多個線程的調用堆棧。

  • 每個線程的活動堆棧幀。

  • 任何方法的調用方和被調用方。

  • 篩選出指定的線程

  • 切換到“並行任務”視圖

  • 標記或取消標記線程

  • 縮放

“並行任務”窗口

  • 查看有關 Task 對象的信息,包括任務 ID、任務狀態(已計划、正在運行、正在等待和已死鎖)以及分配給任務的線程。

  • 調用堆棧中的當前位置。

  • 在創建時傳遞給任務的委托

  • 切換到當前任務

  • 標記或取消標記任務

  • 凍結或解凍任務


免責聲明!

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



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