GDB是一個功能強大的調試器,它是一個自由軟件,能夠用在許多UNIX平臺上。它同時也是Linux系統中的默認調試器。GDB已被移植到許多其他的計算機平臺上,并且能夠用于調試嵌入式實時系統。一般來說,GDB主要可以幫助我們完成以下四個方面的功能: ?1, 啟動你的程序,可以按照你的自定義的要求隨心所欲的運行程序。 2,可以讓被調試的程序在你所指定的斷點處停住。 ?3, 當程序被停住時,可以檢查此時你的程序中所發生的事情。 4, 動態的改變你程序的執行環境。 ?與圖形化的調試工具相比,GDB具有如下優點: GDB的啟動速度比GUI快很多,當只需要快速檢查代碼中的某項內容時,這就是一 個很重要的優點。在與Eclipse比較時,這種啟動時間上的差距很大。?
ubuntu安裝gdb?下面我在自己虛擬機上的一個進程拷貝的代碼進行的實驗
gcc main.c -g -o app
linux調試工具gdb。gdb app
之后我們就可以使用gdb進行調試了
?
run全速執行,start開始執行,這兩個命令如果有命令行參數的話最好加上(建議)
?
?啟動界面
start直接執行到了67行
?
list:可以查看代碼
list+num可以指明查看哪一行代碼
聽過break可以打斷點,info breakpoints可以查看我們用了哪些斷點,delete breakpoints可以取消斷點,這里我們需要注意一個問題就是,在virtual studio中的斷點,如果關閉了下次打開仍然存在,但是這里如果關閉了下次就不會存在了
?
相對應的,vs中有監禁的功能,就是監視變量,display就有這個功能,info display可以查看我們監視了哪些變量,之后我們每次next和step的時候,都會在最后幾行顯示監視的變量,delete就是刪除了
?
step就是按語句調式,next就是按照過程調式
set var 變量名=值 ?可以中途改變變量的值,
?
printf可以中間輸出變量的值
?
backtrace( bt )顯示程序的層次關閉,與函數調用棧幀,下面75行到26行跳到了另外一個函數,這樣可以使用backtrace就可以看層次關系,兩個函數使用不同的棧,所以我們使用print argc的時候不好使,我們可以通過frame臨時跳到main中,
在一盒函數中我們使用finish可以挑戰到調用的開始位置
?
?x(x/20wx)可一查看內存,20表示查看20字節,w表示word,x表示十六進制
?
continue ?如果使用斷點的話我們使用continue可以按照斷電進行
?
set follow-fork-mode (child or parent) ?調用父進程子進程
?
core啟用core文件,幫助調試
在編譯運行app的時候,如果有問題,會生成一個core文件通過gdb core會直接發現錯誤,這種方法非常方便,但是core的文件特別大
?
quit退出調試