軟體除錯是我們軟體開發過程中的重要一課。在前面,我們也討論過程式除錯,比如說這裡。今天,我們還可以就軟體除錯多講一些內容。比如說條件斷點,資料斷點,多執行緒斷點等等。
[cpp]view plain
copy
#include
intvalue = 0;
void
test()
intmain()
(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)對於多執行緒來說,模組設計 > 程式設計預防 > 除錯 > 事後補救。
from:
多執行緒的那點兒事(之多執行緒除錯)
軟體除錯是我們軟體開發過程中的重要一課。在前面,我們也討論過程式除錯,比如說這裡。今天,我們還可以就軟體除錯多講一些內容。比如說條件斷點,資料斷點,多執行緒斷點等等。include int value 0 void test int main 1 資料斷點 所謂資料斷點,就是全域性變數或者函式中的數...
多執行緒的那點兒事(之多執行緒除錯)
軟體除錯是我們軟體開發過程中的重要一課。在前面,我們也討論過程式除錯,比如說這裡。今天,我們還可以就軟體除錯多講一些內容。比如說條件斷點,資料斷點,多執行緒斷點等等。include int value 0 void test int main 1 資料斷點 所謂資料斷點,就是全域性變數或者函式中的數...
多執行緒的那點兒事(之死鎖)
標籤 多執行緒程式設計c 2011 12 02 20 37 13185人閱讀收藏 舉報 多執行緒程式設計 19 相信有過多執行緒程式設計經驗的朋友,都吃過死鎖的苦。除非你不使用多執行緒,否則死鎖的可能性會一直存在。為什麼會出現死鎖呢?我想原因主要有下面幾個方面 1 個人使用鎖的經驗差異 2 模組使用...