gdb除錯命令小結_與多檔案除錯_遠端除錯

誰不小心的發表於2013-10-11

摘要:在vs2010下,我們除錯起來相當方便,但是使用gdb除錯的時候,卻困難重重。本文主要為你介紹如何在gdb下進行除錯和如何將gdb打造成一個整合的編譯環境。


1.gdb命令小結


設定斷點:break(b) linenum

                 b  functionname

如果是在除錯多個檔案,可以這樣設定斷點:

(gdb) break [<file-name>:]<func-name>
(gdb) break [<file-name>:]<line-num>

跳轉:

          從當前函式退出:finish

          從當前迴圈退出:until

檢視:

         變數的值:p  name

          程式碼:list linenum

                    list    funcname

執行:

         執行到地一句:start

          連續執行:run

         繼續執行:continue

         單步執行:next

         進入函式內部:step


2.gdb的替代——整合開發環境


   linux下的除錯環境,如果使用vim和gdb會很容易讓人崩潰,此時我們不妨在除錯的時候使用一些IDE,比如Anjuta 


3.其他的一些整合環境

   此處有免費的10個C/C++整合開發環境。


4.多檔案除錯

在實際工程中,往往有多個檔案,此時需要跨越檔案進行除錯。例如,我們在stack.c中定義了pop、push等操作,在main.c中引用了這些操作,假如在main.c的第10行引用了push,我們可以這樣寫:

b main.c:10 



設定斷點,然後使用step命令,進入函式內部進行除錯。

5.自動顯示:

如果我們比較關心某個變數,必然很想知道程式每次執行停下來的時候,該變數的值,這裡,我們用到了display命令:
display <expr>
display/<fmt> <expr>
display/<fmt> <addr>
gdb attach 除錯


遠端除錯
遠端除錯的原理
遠端除錯的方法
遠端除錯的相關問題


5.幾個常用的需求


1)條件斷點:在滿足某個條件的時候才設定斷點:
break 30 if x==3
info break

2)觀察點:一旦某個表示式的值有變化,立馬停止程式:
watch expr

3)觀察點的禁用與刪除:
刪除設定在某一行的斷點:
clear 39

刪除第幾個斷點:
d 1

禁用第幾個斷點:
disable 1

4)自動化除錯

說明:我們使用斷點的目的,往往是希望程式停留在某處,這樣好讓我們檢視某個變數的值;但是,如果每次都輸出print相關變數的數值,這樣會造成時間上的浪費,所以,我們可以進行自動化除錯,這樣每次程式執行到某個地方,自動列印相關變數的值。
break foo if x>0
commands
printf "x is %d\n",x
continue
end

斷點設定在函式foo中,斷點條件是x>0,如果程式被斷住後,也就是,一旦x的值在foo函式中大於0,GDB會自動列印出x的值,並繼續執行程式。

如果你要清除斷點上的命令序列,那麼只要簡單的執行一下commands命令,並直接在打個end就行了。


5)除錯介面

最開始使用gdb,最不方便的地方就在於無法在除錯的同時觀看code;這裡,我們使用引數 gdb -tui program 就可以實現如同windows一樣的除錯介面了,tui的意思是terminal  user interface.

相關文章