1. 程式人生 > >Linux C語言程式設計(下篇) | gdb的使用

Linux C語言程式設計(下篇) | gdb的使用

前兩篇Linux C語言程式設計(上篇) | gcc的使用Linux C語言程式設計(中篇) | make的使用講述了在Linux下如何編譯得到可執行程式,那麼當程式執行結果不符合我們的預期時,如何進行除錯呢?這個時候就要使用到gdb工具了~

1.gdb介紹

gdb也屬於GNU專案的一部分,是一個除錯工具,它的主要功能是:

  • 使用者可以自定義如何執行程式
  • 可以在指定斷點處執行停止
  • 可以檢查各個變數的值
  • 可以動態改變程式的執行環境
    使用命令gdb -v檢視系統中是否安裝有gdb除錯工具,若無,需要先安裝:

以上一篇中的例子為例

2.使用gdb的前提

使用gdb除錯可執行程式的時候,可執行程式必須要包含有相應的除錯資訊,這樣我們除錯的時候才能看到我們熟悉的名稱,否則就是一堆記憶體地址,很不方便除錯,那麼如何得到帶有除錯資訊的可執行程式呢?
其實很簡單,在使用編譯器(比如gcc)編譯的時候帶有-g引數就可以啦~
修改makefile檔案如下:

然後重新執行make指令編譯(若有可執行程式,先執行make clean清除):

3.gdb的使用

3.1.gdb啟動除錯

使用gdb <可執行程式名稱>即可進入gdb除錯環境,此處輸入gdb cal,可以看到成功進入除錯環境:
在這裡插入圖片描述

3.2.gdb除錯命令

在gdb除錯環境下,使用gdb除錯命令進行除錯,gdb的命令主要有以下幾個:

命令 描述
list(l) 檢視程式碼(預設一次顯示10行)
break(b) 行號或函式名 設定斷點
clear(c)行號或函式名 清除斷點
ignore 斷點號 num 忽略對應斷點num次
info b 檢視當前所設斷點
r(run) 執行程式
n(next) 單步除錯,不進入函式呼叫
s(step) 單步除錯,進入函式呼叫
p(print)變數名 檢視變數
display 變數名 每次自動顯示該變數值
c(continue) 繼續執行,直到結束或遇到新斷點
finish 執行程式,直到當前函式完成返回
q(quit) 退出
shell command 執行shell命令

3.3.gdb除錯例項

首先檢視程式碼:

然後在第7行設定斷點,注意設定了斷點之後程式會停在第7行前,也就是不執行第7行

然後單步執行,但不進入函式,再次檢視變數值: