gdb是GNU debugger的縮寫,是程式設計調試工具。
1、啟動程式,可以按照使用者自定義的要求随心所欲的運作程式。
2、可讓被調試的程式在使用者所指定的斷點處停住 (斷點可以是條件表達式)。
3、當程式停住時,可以檢查此時程式中所發生的事。
4、動态改變程式的執行環境。

示例:
gcc -Wall -g simple.c -o simple
#一定要記得加上-g選項,以便生成調試資訊
啟動gdb:gdb [-q] [executable-file] [core-file]
gdb simple
#啟動gdb
list(l)
#檢視程式的十行代碼,連續鍵入list指令,可檢視該檔案所有代碼
break(b) n
#在第n行設定斷點
info break(i b)
#檢視斷點設定資訊
break function-name (b function-name)
#在函數的入口處設定斷點
run(r)
#啟動程式,在斷點處暫停
step(s)
#單步跟蹤,一步步走
print i(p i)
#列印i目前值
until
#跳出循環
continue(c)
#繼續運作,直到下一個斷點,如果一直運作到程式結束,則會列印程式結束資訊
enter鍵(回車)
#表示使用上一個指令
finish
#退出目前函數,列印函數的傳回值
delete n
#删除斷點n
quit(q)
#退出整個gdb調試程式
1、run(r) #運作程式,直到第一個斷點或程式結束
2、run arg1 arg2 … #運作程式并加上參數,如:r a b c d ...
list(l) - 檢視最近10行源碼
list fun-name - 檢視fun函數源碼
list file:fun-name – 檢視file檔案中的fun函數源碼
如:l search.c:seq_search #如果隻有一個檔案包含有seq_search函數,則不必加”search.c:”
list [m,n]
list 2,10 – 檢視從第2行到第10行源代碼
list ,15 – 檢視最多到第15行的源代碼
break [line-num]
break [fun-name]
break [file-name:line-num] #b search.c:4
break if <condition> - 條件成立時程式停住
E.g. break if i = 10
info break(i b) – 檢視斷點
watch expr – 一旦expr值發生改變,程式就停住。【設定觀察點】
E.g. watch i #一旦i值發生改變,則程式暫停
delete n(d n) – 删除斷點n # d 1 d 1 2 3
continue(c)
- 運作至下一個斷點
step(s)
- 單步跟蹤,進入函數内部,類似于Vs中的step in[但是不會進入沒有提供源代碼的函數]
next(n)
- 單步跟蹤,不進入函數内部,類似于VC中的step out
finish
- 運作程式,直到目前函數完成傳回。并列印函數傳回時的堆棧位址和傳回值及參數值等資訊。但是不會跳出main函數。
until
– 運作程式直到退出循環體。如果一次沒有跳出,則執行下一次
return [value]
- 停止目前函數,提前讓函數傳回[動态調整程式的執行],将value傳回調用者,相當于step return
set variable var-name = value
- 改變一個變量的值
指令
作用
運作,啟動程式
列出10行源程式
break(b)
設定斷點
列印斷點詳細資訊
繼續運作程式,直到下一個斷點
watch
設定觀察點
單步跟蹤,類似于VC中的step in
next(n)
單步跟蹤,類似于VC中的step out
運作程式,直到目前函數傳回,傳回函數
until(u)
跳出循環(有時需要兩次)
print(p)
檢視運作時變量及表達式
help
列印幫助資訊
附-
#Makefile
CC = gcc
CFLAGS = -Wall -g
BIN = sample main
.PHONY: all clean
all: $(BIN)
%.o: %.c
$(CC) $(CFLAGS) -o $@ -c $<
sample: sample.o
main: main.o search.o
$(CC) $(CFLAGS) -o $@ $^
clean:
-rm -rf $(BIN) *.o