多執行緒的那點兒事(之多執行緒除錯)

2021-08-26 11:46:56 字數 1595 閱讀 6414

軟體除錯是我們軟體開發過程中的重要一課。在前面,我們也討論過程式除錯,比如說這裡。今天,我們還可以就軟體除錯多講一些內容。比如說條件斷點,資料斷點,多執行緒斷點等等。

#include int value = 0;

void test()

int main()

(1)資料斷點

所謂資料斷點,就是全域性變數或者函式中的數計算的過程中,如果資料值本身發生了改變,就會觸發斷點。這裡的資料有兩種,乙個是全域性資料,乙個函式內部的資料。

以全域性資料value為例:

a)按f10,執行程式,獲取value的位址;

b)alt+f9,選擇【data】->【advanced】;

c)在【expression】中輸入dw(0x0043178),【ok】回車;

d)f5繼續執行程式,則程式會在value發生改變的時候停住。

以區域性資料total為例,

a)按f10,執行程式,獲取value的位址;

b)alt+f9,選擇【data】->【advanced】;

c)在【expression】中輸入total,在【function】輸入test,【ok】回車;

d)f5繼續執行程式,則程式同樣會在total發生改變的時候停住。

(2)條件斷點

條件斷點和資料斷點差不多。只不過,資料斷點在資料發生改變的時候就會斷住,而條件斷點只有在滿足一定的條件下才會有斷住。比如說,我們可以讓test子程式在index==5的時候斷住。

a)按f10,執行程式,獲取value的位址;

b)alt+f9,選擇【data】->【advanced】;

c)在【expression】中輸入index==5,在【function】輸入test,【ok】回車;

d)f5繼續執行程式,則程式同樣會在index==5的時候停住。

(3)多執行緒除錯

在vc上面對多程式的除錯比較簡單。如果想要對程式進行除錯的話,首先f10,開始執行程式。其次,我們需要等執行緒建立之後才能設定斷點,不然我們看到的程式只有main函式乙個thread。

a)單擊【debug】,選擇【threads】,那麼我們就可以開始多執行緒除錯了;

b)如果需要對某乙個thread掛起,單擊對應的thread,選擇【suspend】即可;

c)如果需要對某乙個thread重新排程,單擊對應的thread,選擇【resume】即可;

d)如果需要檢視特定thread的堆疊,那麼選擇那個thread,然後【set focus】,關閉threads對話方塊,在堆疊視窗中即可看到;

e)如果某個執行緒被掛住,那麼此時所有的執行緒都掛住了,如果你step執行,所有的threads都會參與執行;

f)如果需要對某乙個thread進行除錯,那麼需要對其他的thread進行suspend處理 。

總結:

1)看記憶體、看堆疊、條件斷點、資料斷點需要綜合使用,

2)程式設計越早除錯,越好,

3)先編寫好單執行緒程式,再編寫好多執行緒程式,

4)對於多執行緒來說,模組設計 > 程式設計預防 > 除錯 > 事後補救。

多執行緒的那點兒事(之多執行緒除錯)

軟體除錯是我們軟體開發過程中的重要一課。在前面,我們也討論過程式除錯,比如說這裡。今天,我們還可以就軟體除錯多講一些內容。比如說條件斷點,資料斷點,多執行緒斷點等等。include int value 0 void test int main 1 資料斷點 所謂資料斷點,就是全域性變數或者函式中的數...

多執行緒的那點兒事(之多執行緒除錯)

軟體除錯是我們軟體開發過程中的重要一課。在前面,我們也討論過程式除錯,比如說這裡。今天,我們還可以就軟體除錯多講一些內容。比如說條件斷點,資料斷點,多執行緒斷點等等。cpp view plain copy include intvalue 0 void test intmain 1 資料斷點 所謂資...

多執行緒的那點兒事(之死鎖)

標籤 多執行緒程式設計c 2011 12 02 20 37 13185人閱讀收藏 舉報 多執行緒程式設計 19 相信有過多執行緒程式設計經驗的朋友,都吃過死鎖的苦。除非你不使用多執行緒,否則死鎖的可能性會一直存在。為什麼會出現死鎖呢?我想原因主要有下面幾個方面 1 個人使用鎖的經驗差異 2 模組使用...