linux c之gdb常用斷點除錯總結
阿新 • • 發佈:2019-02-17
1 、安裝GDB
sudo apt-get install gdb
2 、怎麼打斷點
1 、原始檔的某一行設定斷點
break 行號
2、一個特定的函式設定斷點
break 函式名
3、設定條件斷點
break 行號 if 條件
3、舉例分析
hello2.c原始檔如下
#include<stdio.h> int main() { int a = 1, b = 2, c = 3; int i; printf("hello chenyu"); for (i = 0 ; i < 100; i++) { ++a; if (i > 90) { ++b; } else { ++c; } } printf("a = %d, b = %d, c = %d", a, b, c); int cc = 0; for (cc; cc < 9; cc++) { printf("c %d", i); } return 0; }
比如我們在 ++b (第10行)這行和printf("c %d", i)(第18行)這兩行打斷點命名如下
1、編譯
gcc -g hello2.c
2、gdb除錯
gdb hello2
3、顯示程式碼行數命令如下
list
3次回車
4 、然後輸入下面打斷點命令
break 10
break 18
圖片如下:
5 、 執行並且跳轉到斷點
1、執行
start
2 、跳轉到斷點命令(countine 簡寫c)
c
程式就到到++b 這行來,上面2個步驟也可以用這個run (簡寫 r)命令程式碼
r
我們這裡程式碼會跳到這個斷點裡面來,我麼就避免了手動迴圈這麼多次,因為這個斷點會打很多次,所以我們可以用c命令,還是會在這行,所以打斷點一般不要打在迴圈裡面,當這個程式碼執行完之後,我們再用c命令,就會列印18行的程式碼
我們也可以用watch命令來觀察變數,如果變數的值發生變化,程式就會停止
watch b
我麼看變數的值或則單個變數的值可以用下面命令
i locals
p c
進入函式內部用下面命令
s
單步除錯往下執行用下面命令
n
刪除斷點
delete 行號
退出gdb命令
quit
4、如何儲存斷點
有時候執行時,上次打的斷點沒了,怎麼儲存呢?
1、檢視斷點資訊並儲存
info b
2 、儲存斷點
save breakpoint fig.dp
斷點儲存在fig.dp檔案裡面
3、除錯時候讀取儲存斷點檔案
gdb hello2 -x fig.dp
要記住加上引數 -x
然後再去檢視是否有斷點
info b
可以看到是有2個斷點的
5、總結
學會了gdb打斷點的基本命令,還有一些除錯手段,以及斷點的儲存。