三、gdb除錯(上)
01.gdb:gdb是gnu debugger的縮寫,是程式設計除錯工作。
功能:啟動程式,可以按照使用者自定義的要求隨心所欲的執行程式;
可讓被除錯的程式在使用者所指定的除錯的斷點處停住(斷點可以
是條件表示式);
當程式停住時,可以檢測此時程式中所發生的事;
動態改變量程式的執行環境。
#vi smiple.c
#include
#include
long func(int n);
int main(int argc, char *argv)
printf("result[1-100] = %ld\n",result);
printf("result[1-10]",func(10));
return 0;
}long func(int n)
return sum;
}:wq
#gcc -wall -g(以便生成除錯,將原始檔顯示出來) ******.c -o
******
#./******
#gdb ******
(gdb)list(顯示所有源**)
(gdb) l(同上)
(gdb)break 10(在第10行設定斷點)
(gdb)info break(檢視斷點資訊) --ib(簡寫)
(gdb)b func(在函式入口設定斷點)
(gdb)run --r(執行到斷點處)
(gdb)step --s(單步跟蹤)
(gdb)print i --p i(列印出i的當前值)
(gdb)p result
result=3
(gdb)p i
(gdb)s
(gdb)until(跳出for迴圈,迴圈的下一條語句)
(gdb)c(continue執行到下乙個斷點處)
(gdb)直接按回車,使用上一次的命令
(gdb)finish(結束單步除錯)
#vi makefile
.phony:clean all
cc=gcc
cflags=-wall -g
bin=****** main
all:$(bin)
$(cc) $(cflags) -c $< -o $@
main:main.o search.o
$(cc) $(cflags) &^ -o $@
clean:
rm -f *.o $(bin)
:wq#gdb ******
(gdb)r a b c(給程式加上啟動引數)
(gdb)list fun(檢視fun的函式原始碼)
(gdb)list file:fun(檢視file檔案中的fun函式原始碼)
02.設定斷點與觀察點
break 行號
break fun
break file:行號
break file:fun
break if-條件成立時程式停住
info break(i b)-檢視斷點
watch expr -變數expr值發生改變,程式停住
delete n - 刪除斷點
03.單步除錯
continue(c)-執行至下乙個斷點
step(s)- 單步跟蹤,進入函式,類似於vc中的step in
next(n)-單步跟蹤,不進入函式,類似於vc中的step out
finish - 執行程式,直到當前函式完成返回。並列印函式返回時的堆疊位址和返回值及引數等資訊。
until - 當厭倦了在乙個迴圈體內單步跟蹤時,這個命令可以執行程式直到退出迴圈體
print(p)檢視執行時的變數以及表示式
Linux開發工具之偵錯程式gdb
gdb三方面的功能 1 啟動被除錯程式 2 讓被除錯的程式在指定的位置挺住 3 當程式被停住時,可以檢查程式狀態 現在讓我們就例項進行對gdb功能的了解 建立乙個demo.c,寫如下程式 include int add sum int sum int main printf sum d n sum ...
Linux開發工具 gdb和make
gdb主要有以下幾個方面的功能 1 啟動你的程式,可以按照你的自定義的要求隨心所欲的執行程式。2 可讓被除錯的程式在你所指定的調置的斷點處停住。斷點可以是條件表示式 3 當程式被停住時,可以檢查此時你的程式中所發生的事。4 你可以改變你的程式,將乙個bug產生的影響修正從而測試其他bug。進入gdb...
Linux開發工具
linux開發工具 vim gcc gdb make git github 文字編輯器 vim 功能最強大 1 使用 三種模式 命令列模式 插入模式 底行模式 vim 空格 檔名 例如vim hello.c 此時是命令列模式 無法插入資料 需要進入插入模式 按i或者a 退出插入模式 按esc 切換到...