gdb是乙個互動式的除錯工具,在linux系統中可以很好地幫助我們完成程式的除錯。
它的主要功能有:
1. 設定斷點,讓程式直接執行至可能出錯的地方
2. 檢視變數的值,在除錯過程中隨時檢視我們關注的變數的值。
3. 修改變數的值,這是vs的偵錯程式所不具有的功能,可以幫助我們更快的定位程式的問題所在。
那麼gdb除錯工具要怎麼用呢?
1. 首先編譯可執行程式的時候需要增加額外的編譯選項-g. 例如,原始碼為example.c的檔案需要用gcc -g -o example example.c.
2. 執行gdb example,進入到gdb除錯命令列的輸入介面。
3. 進入到除錯介面以後如何除錯呢?接下來介紹幾個比較有用並且除錯中常用的命令。
(1)list命令,顯示原始檔的內容,可以用list 4,8只顯示第4行到第8行的內容。
(2)break line-number, break function-name, break line/functionname if condition, break filename:line-number/function-name
分別對應在指定行號設定斷點,函式名字前設定斷點,滿足condition條件時斷點有效,在相應原始檔的某行/某函式設定斷點。
(3)info break,顯示當前設定的所有斷點。
(4)run,執行程式,在斷點處停下
(5)print i, 列印變數當前值;print expression,列印任意表示式的值;print func(i),列印呼叫某函式的返回值。
(6)step,單步執行;next, 單步執行不進入函式;continue,繼續執行至下乙個斷點。
(7)set variable i=7,設定變數的值。
(8)clear line-num,刪除指定的斷點,使用delete刪除所有的斷點。
(9)whatis i/whatis function-name,檢視制定變數的資料型別或者函式的型別。type = int/ type = int (void)
backtrace 顯示程式中的當前位置和表示如何到達當前位置的棧跟蹤(同義詞:where)
breakpoint 在程式中設定乙個斷點
cd 改變當前工作目錄
clear 刪除剛才停止處的斷點
commands 命中斷點時,列出將要執行的命令
continue 從斷點開始繼續執行
delete 刪除乙個斷點或監測點;也可與其他命令一起使用
display 程式停止時顯示變數和表達時
down 下移棧幀,使得另乙個函式成為當前函式
frame 選擇下一條continue命令的幀
info 顯示與該程式有關的各種資訊
jump 在源程式中的另一點開始執行
kill 異常終止在gdb 控制下執行的程式
list 列出相應於正在執行的程式的原檔案內容
next 執行下乙個源程式行,從而執行其整體中的乙個函式
print 顯示變數或表示式的值
pwd 顯示當前工作目錄
pype 顯示乙個資料結構(如乙個結構或c++類)的內容
quit 退出gdb
reverse-search 在原始檔中反向搜尋正規表示式
run 執行該程式
search 在原始檔中搜尋正規表示式
set variable 給變數賦值
signal 將乙個訊號傳送到正在執行的程序
step 執行下乙個源程式行,必要時進入下乙個函式
undisplay display命令的反命令,不要顯示表示式
until 結束當前迴圈
up 上移棧幀,使另一函式成為當前函式
watch 在程式中設定乙個監測點(即資料斷點)
whatis 顯示變數或函式型別
附2 檢視和修改程式通用暫存器
有一組專用的gdb變數可以用來檢查和修改計算機的通用暫存器,gdb提供了目前每一台計算機中實際使用的4個暫存器的標準名字:
l $pc : 程式計數器
l $fp : 幀指標(當前堆疊幀)
l $sp : 棧指標
l $ps : 處理器狀態
使用print $pc列印各暫存器的值。
gdb工具的使用
info registers info all registers 下面這兩個暫時不知道如何使用 info registers reggroup info registers regname four standard register name pc sp fp ps p x pc x i pc ...
gdb工具使用
gdb是乙個由gnu開源組織發布的 unix linux作業系統下的 基於命令列的 功能強大的程式除錯工具。對於一名linux下工作的c 程式設計師,gdb是必不可少的工具。以下程式為例 include include int add sum int a,int b int main int arg...
(四)GDB工具的使用
寫乙個.c或者.cpp程式都可以用gdb工具來除錯。在linux環境下,用gcc來編譯鏈結,可以用makefile指令碼來做管理,makefile指令碼網上有許多資料,就不專門寫部落格來記錄了。一 準備好原始檔 這裡使用helloworld helloworld.c檔案內容如下 int main r...