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機器!
這個俺就不多說了,基本上很少用!