vc除錯多執行緒程式的方法

2021-07-15 04:03:56 字數 1226 閱讀 8703

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 切換當前除...