這篇文章將gdb的簡單使用,通過此篇文章你能學習到使用gdb進行調試程序
在Linux中編寫程序時,如何進行程序的debug工作呢?今天來介紹下gdb這個工具,可以在Linux下直接man gdb查看幫助信息
(一)gdb命令介紹
常用命令:
命令 | 命令縮寫 | 命令說明 |
---|---|---|
run | r | 開始運行程序,在第一個斷點處停住 |
start | st | 啟動調試,在main函數中第一條語句停住 |
next | n | 執行下一行,不會進入函數內部 |
step | s | 執行下一條語句,會進入函數 |
display | disp | 查看某個變量,每次停下來都會顯示它的值 |
info | i | 查看程序信息 |
break | b | 設置斷點 |
p | 打印變量值 | |
continue | c | 繼續運行程序 |
set var name=value | 設置變量的值 | |
list | l | 顯示程序源碼,默認顯示10行 |
kill | k | 終止程序調試 |
watch | 監視變量值的變化 | |
breaktrace | bt | 查看函數調用信息 |
quit | q | 退出gdb環境 |
基礎操作:
(1)編譯調試程序 :gcc -g xxx.c -o xxx
(2)進入gdb環境 : gdb xxx
(3)根據需求執行上面的命令
(4) 退出gdb
(二)實例運行
test.c
#include <stdio.h>int main(int argc, char *argv[])
{int a=0,b=0,c=0;a=1;b=2;c=a+b;printf("a=%d,b=%d,c=%d\n",a,b,c);return 0;
}
zhixia# gcc -g test.c -o test
zhixia# gdb test
通過上面的操作已經進入了gdb環境了
輸入list查看代碼:從上次位置開始顯示,默認一次顯示10行
(gdb) list
1 #include <stdio.h>
2
3 int main(int argc, char *argv[])
4 {
5 int a=0,b=0,c=0;
6 a=1;
7 b=2;
8 c=a+b;
9 printf("a=%d,b=%d,c=%d\n",a,b,c);
10 return 0;
(gdb)
設置斷點:執行到此位置會停下來
break line/function/
查看斷點信息 : info b
刪除斷點:delete breakpoints 斷點號
使能斷點: enable 斷點編號
失能斷點: disable 斷點編號
(gdb) break 7
Breakpoint 1 at 0x400551: file test.c, line 7. //斷點編號是1
(gdb) r
Starting program: /root/test/test Breakpoint 1, main (argc=1, argv=0x7fffffffdf78) at test.c:7
7 b=2;
顯示變量值:display
(gdb) display a
1: a = 1
(gdb)
單步調試命令:next/step
step n,next n 表示連續單步執行n條指令,如果期間遇到斷點,則停下來
(gdb) next
8 c=a+b;
1: a = 1
(gdb) step
9 printf("a=%d,b=%d,c=%d\n",a,b,c);
1: a = 1
(gdb)
打印變量信息print
(gdb) p a
$1 = 1
(gdb)
set var name=value
在程序運行中動態改變變量的值
(gdb) set var a=4
(gdb) p a
$2 = 4
(gdb)