.Net多線程編程—使用Visual Studio 2012進行調試

來源:互聯網
上載者:User

標籤:tac   堆棧   ted   變化   編譯   glob   任務   函數調用   技術分享   

1 相關概念

1)棧幀

C語言中,每個棧幀對應著一個未運行完的函數。棧幀中儲存了該函數的返回地址和局部變數。

棧幀也叫過程活動記錄,是編譯器用來實現過程/函數調用的一種資料結構。

2)逐步執行與單步函數執行

逐步執行又被稱為逐語句執行,單步函數執行又被稱為逐過程執行。單步函數執行不會進入函數體。

3)主線程不會顯示在Parallel Tasks 視窗中,因為主線程不是任務。但它會顯示在顯示線程的視窗中。

 

2 Parallel Tasks 視窗

開啟視窗:

斷點調試情況下,按F5或點擊“啟動調試”,如所示

在上步基礎上,點擊“調試”——>“視窗”:

 在上步基礎上,點擊“任務”:

 在上步基礎上,按右鍵任務視窗,調出菜單,可以調出為每一個任務分配的線程:

 說明:

1)顯示沒有任務可顯示,這是因為,將斷點打到圖示位置,還沒有執行任務。

2)在Parallel Tasks 視窗中,雙擊一個任務,可顯示所選任務將要啟動並執行下一條語句。

3)任務還沒有分配時,Parallel Tasks 視窗中沒有任何資訊顯示,狀態中按F10逐過程執行,會出現一條資訊,如所示:

 接著,繼續按F10,會出現第二條資訊,如所示:

 上面兩幅圖中Parallel Tasks 視窗左側的黃色箭頭指示當前任務。

4)只關注一個任務

為了能夠在有多個任務並存執行的時候,專註觀察一個任務的執行情況,可使用“凍結線程”功能。

如所示,Parallel Tasks 視窗中有5個任務,其中1個已指派,4個在執行。

 在中,右鍵,調出菜單,選擇 ,結果一次入下面兩幅圖:

 

中藍色的暫停標識表示被凍結的任務。

值得注意的是:我們的程式中有五個任務,然而這裡顯示四個任務在運行,還有一個已指派,那麼它是沒有被凍結的,所以還不能夠實現專註調試一個任務的目的,待到這個任務運行時,將其凍結後,才可專註調試一個任務。

 是只有一個活動的任務。

再者:F10為逐過程運行,F11為逐句運行,調試時請使用F11,逐句調試更易發現問題。

5)切換到任務

在Parallel Tasks 視窗,右鍵點擊調出菜單,選擇“切換到任務”,可以定位到那個任務對應的匿名方法

3 Threads視窗

斷點調試狀態下,按F5或點擊“啟動調試”,然後點擊“調試”——>“視窗”——>“線程”:

說明:

1)雙擊Threads視窗中相應的行可以看到將要執行下一行語句或線程的當前行,如所示:

 

2)Threads視窗不一定會將所有任務都顯示出來。

如,所示將斷點打在第13行,只能看到主線程被載入,其他的任務都沒有顯示出來。

 多加幾個斷點,如所示:

 按F5,如所示:

 雙擊中某一條,注意視窗資訊的變化。

 

 

 4 Call Stack視窗

斷點調試狀態下,按F5或點擊“啟動調試”,然後點擊“調試”——>“視窗”——>“呼叫堆疊”

 在Call Stack視窗中,按右鍵,調出菜單。

 

5 Parallel Stack視窗

斷點調試狀態下,按F5或點擊“啟動調試”,然後點擊“調試”——>“視窗”——>“並行堆棧”

 

Parallel Stack視窗的左上方 可以切換顯示線程和任務,切換到任務,顯示如下:

說明:

1)節點之間的箭頭表示任務或線程整體的調用路徑,藍色高亮箭頭表示當前任務或線程的路徑。

2)同時調出Parallel Stack和Parallel Task視窗,Parallel Stack設定如:

 

雙擊Parallel Task中的一條任務,可匹配到Parallel Stack中的任務。

 將Parallel Stack切換到線程視圖,藍色的為對應部分。

 點擊紅框中的圖表,可得下面的視圖

 

6 實戰運用

檢測死結

具體程式碼見易錯點分析那部分。

按F5,然後“調試”——>“全部中斷”,可得下面的結果,可以看出兩個任務狀態都為“死結”,雙擊每一條,可定位到相應的任務。

 

  -----------------------------------------------------------------------------------------

轉載與引用請註明出處。

時間倉促,水平有限,如有不當之處,歡迎指正。

.Net多線程編程—使用Visual Studio 2012進行調試

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.