天天看點

vc調試多線程程式的方法

1、對一條特定的線程進行調試  

        Visual   C++調試器支援多線的情況,如果你在許多線程都調用的函數中  

        設定一個斷點,每當一個線程遭遇到此斷點,調試器就會線上程之間循環切換  

        有個方法可以避開這個問題,就是挂起所有線程,除了你感興趣的那條(要調試  

        的那條),在調試器中打開[Debug]菜單并選擇[Thread]你就可以獲得一個線程對  

        話框,在這裡你可以挂起所有的線程,把你要調試的線程留下來,單獨調試他  

  2、運轉記錄  

        就是讓程式的關鍵部分顯示出其發生的活動的一種方法!  

        就是在程式的關鍵部位(某一時刻你想知道他的狀态)加上一些輸出語句,比如  

        printf       TRACE     等等,可以将資訊輸出到螢幕,也可以重定向到檔案中,不要  

        用一些控件比如ListBox,因為ListBox也是一個視窗,在他的内部有自己的消息  

        循環,向ListBox中輸出調試資訊的時候,會引起不必要的線程切換(從目前  

        線程切換到ListBox的消息循環)非常耗時!這對多線程這種對時間很敏感的程式  

        來說有可能會影響運作的結果!  

        在GUI程式中也是可以擁有console視窗的,由于console視窗由系統的裝置驅動  

        程式負責,即使你的程式當掉或在調試器中停止console視窗仍有反應!  

  3、記憶體記号(Memory   Trails)  

        上面的兩種方法執行的時間都稍長,有可能影響到程式運作的結果,Memory   Trail  

        屬于一種比較低階的技術!  

        是用Memory   Trail的方法:  

        你必須産生一個足夠大的全局緩沖區,以及指向該緩沖區的全局指針,例如:  

        char   gMemTrail[16384];  

        char   *pMemTrail   =   gMemTrail;  

        當你想輸出某些東西到螢幕上或檔案中時,你就寫個記号到MemTrail中  

        例如:  

        *pMemTrail++   =   'f';  

        你的程式的每一個追蹤點都應該寫一個不同的記号,不論什麼時候你想要,或是  

        程式當掉之後,你可以利用調試器看看   memory   trail中的内容!  

  3、硬體調試寄存器  

        隻适用于Intel機器!  

        這個俺就不多說了,基本上很少用!