多執行緒除錯)

2021-07-23 03:08:44 字數 1634 閱讀 3453

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

[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)對於多執行緒來說,模組設計 > 程式設計預防 > 除錯 > 事後補救。

linux gdb 除錯多執行緒 單獨除錯執行緒

linux gdb 除錯多執行緒 單獨除錯執行緒 2011年01月26日 星期三 下午 06 10 一 多執行緒除錯 多執行緒除錯可能是問得最多的。其實,重要就是下面幾個命令 info thread 檢視當前程序的執行緒。thread 切換除錯的執行緒為指定id的執行緒。break file.c 1...

多執行緒程式設計 多執行緒gdb除錯

學習多執行緒程式設計怎麼能夠不會多執行緒 gdb 除錯呢?這一講主要學習多執行緒的 gdb 除錯。首先列出我們經常會使用到的指令 1 info threads 顯示當前可除錯的所有執行緒,每個執行緒會有乙個gdb為其分配的id,後面操作執行緒的時候會用到這個id。前面有 的是當前除錯的線 程。2 t...

gdb多執行緒除錯

先介紹一下gdb多執行緒除錯的基本命令。info threads顯示當前可除錯的所有執行緒,每個執行緒會有乙個gdb為其分配的id,後面操作執行緒的時候會用到這個id。前面有 的是當前除錯的執行緒。thread id切換當前除錯的執行緒為指定id的執行緒。break thread test.c 12...