多線程的那點兒事(之多線程調試) 2016-09-28 00:00:00 廣州睿豐德信息科技有限公司 閱讀 睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接 軟件調試是我們軟件開發過程中的重要一課。在前面,我們也討論過程序調試,比如說這里。今天,我們還可以就軟件調試多講一些內容。比如說條件斷點,數據斷點,多線程斷點等等。 [cpp] view plaincopy #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)對于多線程來說,模塊設計 > 編程預防 > 調試 > 事后補救。 from:http://blog.csdn.net/feixiaoxing/article/details/7043631RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成