天天看點

gdb學習(一)[第二版]

gdb是GNU debugger的縮寫,是程式設計調試工具。

1、啟動程式,可以按照使用者自定義的要求随心所欲的運作程式。

2、可讓被調試的程式在使用者所指定的斷點處停住 (斷點可以是條件表達式)。

3、當程式停住時,可以檢查此時程式中所發生的事。

4、動态改變程式的執行環境。

gdb學習(一)[第二版]

示例:

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 ...

gdb學習(一)[第二版]

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