gdb三方面的功能:
1、啟動被除錯程式
2、讓被除錯的程式在指定的位置挺住
3、當程式被停住時,可以檢查程式狀態
現在讓我們就例項進行對gdb功能的了解:
建立乙個demo.c,寫如下程式:
#include
int add_sum(int sum)
int main()
printf("sum = %d\n",sum);
int result = add_sum(sum);
printf("result = %d\n",result);
return 0;}
下面對demo.c進行編譯
gcc -g demo.c -o demo
gdb demo(gdb會顯示版本資訊,然後停在符號(gdb)處等待使用者輸入除錯命令)
(gdb)run(執行程式)
(gdb)list(檢視原始檔)
(gdb)break(在20行設定斷點)
(gdb)info break(檢視斷點情況,有斷點編號)
(gdb)delete +斷點編號(刪除斷點)
(gdb)print i(檢視當前i的值)
(gdb)continue(斷點後繼續執行)
(gdb)next(單步執行 next不會進入函式內部執行)
(gdb)step(單步執行 step可以進入函式內部執行)
偵錯程式gdb其實有個非常妙的用處:它可以用來處理段錯誤(即在編譯時沒有錯,執行卻顯示錯誤)
示例**demo.c:
#include
int main()
用gdb除錯:
gcc -g demo.c
gdb a,out
(gdb)run(停在哪一行,就是哪一行段錯誤)
其實 還有乙個檢測段錯誤的方法 就是每行列印有個標記 停在哪**就有錯 如:
#include
int main()
這樣的列印結果為:a! b!我們就可以知道錯誤在*ptr = 'l';啦~
但是如果開發一款軟體,**量巨大 ,而且也不能顯示給使用者你的除錯資訊,同時為了便於程式設計師檢錯,那麼這就需要巨集替換這一神器啦~
編寫乙個標頭檔案debug.h
#ifndef __debug__
#define debug_msg(fmt, args...)
#else
#define debug_msg(fmt, args...) printf(fmt, ##args) //將debug_msg替換成printf
#endif
發布版將標頭檔案第一行刪掉 同時檢錯**改為:
#include
int main()
而程式需要檢錯時只要在編譯時輸入:gcc demo.c -d__debug__(注意是兩個_)這就相當於在標頭檔案第一行加了#define__debug__
偵錯程式gdb就講完啦~~
Linux開發工具
linux開發工具 vim gcc gdb make git github 文字編輯器 vim 功能最強大 1 使用 三種模式 命令列模式 插入模式 底行模式 vim 空格 檔名 例如vim hello.c 此時是命令列模式 無法插入資料 需要進入插入模式 按i或者a 退出插入模式 按esc 切換到...
Linux開發工具之gdb(上)
三 gdb除錯 上 01.gdb gdb是gnu debugger的縮寫,是程式設計除錯工作。功能 啟動程式,可以按照使用者自定義的要求隨心所欲的執行程式 可讓被除錯的程式在使用者所指定的除錯的斷點處停住 斷點可以 是條件表示式 當程式停住時,可以檢測此時程式中所發生的事 動態改變量程式的執行環境。...
《Linux程式設計》 開發工具
一 多個原始檔帶來的問題 二 make命令和makefile 1 makefile的語法 1 makefile檔案由一組依賴關係和規則組成。2 make命令會會根據makefile檔案來確定目標檔案的建立順序以及正確的規則呼叫順序。2 make命令的選項和引數 1 make程式選項 i k 讓mak...