Linux開發工具之偵錯程式gdb

2021-07-14 15:32:19 字數 1462 閱讀 4529

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