Linux C語言程式設計(下篇) | gdb的使用
阿新 • • 發佈:2018-12-29
前兩篇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行:
然後單步執行,但不進入函式,再次檢視變數值: