多線程的那點兒事(之多線程調試)


【 聲明:版權所有,歡迎轉載,請勿用於商業用途。  聯系信箱:feixiaoxing @163.com】

    軟件調試是我們軟件開發過程中的重要一課。在前面,我們也討論過程序調試,比如說這里。今天,我們還可以就軟件調試多講一些內容。比如說條件斷點,數據斷點,多線程斷點等等。

 

[cpp]  view plain  copy
 
  1. #include <stdio.h>  
  2. int value = 0;  
  3.   
  4. void test()  
  5. {  
  6.     int total;  
  7.     int index;  
  8.   
  9.     total = 0;  
  10.     for(index = 0; index < 100; index ++)  
  11.         total += index * index;  
  12.   
  13.     value = total;  
  14.     return ;  
  15. }  
  16.   
  17. int main()  
  18. {  
  19.     test();  
  20.     return 1;  
  21. }  

(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)對於多線程來說,模塊設計 > 編程預防 > 調試 > 事后補救。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM