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機器!
這個俺就不多說了,基本上很少用!
多執行緒程式的除錯
gdb對於多執行緒程式的除錯有如下的支援 gdb r starting program root thread new thread 1073951360 lwp 12900 new thread 1082342592 lwp 12907 以下三個為新產生的執行緒 new thread 109073...
Linux下多執行緒程式除錯方法
1 最直接的方法就是在源程式插入printf語句來列印出一些有用的變數。這種方法的優點是不用借助其他工具就可以對程式的執行進行觀察,缺點是插入語句的位置 粒度等都需要除錯者自己去權衡,如果插入過多的列印語句,則頻繁的io操作會使程式執行變慢,執行緒行為改變,有些bug甚至不會再出現。至於需要在什麼地...
多執行緒除錯方法
set target async 1 set pagination off set non stop on info threads 顯示當前可除錯的所有執行緒,每個執行緒會有乙個 gdb為其分配的 id,後面操作執行緒的時候會用到這個id。前面有 的是當前除錯的執行緒。threadid 切換當前除...