【 聲明:版權所有,歡迎轉載,請勿用於商業用途。 聯系信箱:feixiaoxing @163.com】
軟件調試是我們軟件開發過程中的重要一課。在前面,我們也討論過程序調試,比如說這里。今天,我們還可以就軟件調試多講一些內容。比如說條件斷點,數據斷點,多線程斷點等等。
- #include <stdio.h>
- int value = 0;
- void test()
- {
- int total;
- int index;
- total = 0;
- for(index = 0; index < 100; index ++)
- total += index * index;
- value = total;
- return ;
- }
- int main()
- {
- test();
- return 1;
- }
(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)對於多線程來說,模塊設計 > 編程預防 > 調試 > 事后補救。
