gdb是gnu的除錯工具,它可以跟蹤被除錯的程式,進行設定斷點、單步執行等操作。
主要用於程式的排錯,方便找出程式錯誤所在處。
如寫乙個程式測試char型別所能表示整數。
建立乙個moshou.c檔案,寫入:
#include
#include
int main()
printf("%d\n",strlen(a));
return 0;
在終端輸入:
[root@localhost c]# gcc moshou.c
[root@localhost c]# ./a.out
255可以看出結果是255
在終端輸入 gcc 檔名.c -o moshou -g
[root@localhost c]# gcc moshou.c -o moshou -g (或者寫成gcc -g moshou.c -o moshou)
[root@localhost c]# ls
11 33 55 a.out case.sh file hello.c if jisuan.c moshou.c pash.sh quyu.c shell.sh sizeof.c strlen.c switch
22 44 a1 author: const.c hello hello.sh if.c moshou pash quyu scanf.c sizeof strlen strlen.c.c switch.c
[root@localhost c]# gdb moshou(輸入gdb空格檔名,這時候就進入除錯模式了)
以下是在gdb下幾個操作指令:
一list
格式簡寫 l空格數字
表示輸入你想顯示的程式所對應的行數,就可以看到vim編輯器下的程式內容了。
如:(gdb) list 1
1 #include
2 #include
3 int main()
4 (gdb) list 13
8 11 printf("%d\n",strlen(a));
12 return 0;
13 }
(gdb)
二break用來設定斷點
格式:break空格想設定斷點的行號
如:(gdb) break 10
breakpoint 1 at 0x80483be: file moshou.c, line 10.
這時候用run指令試執行一下程式:
(gdb) run
starting program: /root/c/moshou 無
breakpoint 1, main () at moshou.c:11 (breakpoint是斷點的編號,這裡因為第10行是「}」無意義所以直接跳到11行)
11 printf("%d\n",strlen(a)); (這裡就執行到第10行)
若:想檢視有那幾個斷點,在什麼位置。可以輸入
(gdb) info break
num type disp enb address what
1 breakpoint keep y 0x080483be in main at moshou.c:10
breakpoint already hit 1 time
若 想讓程式繼續執行可以輸入 continue
(gdb) contine
undefined command: "contine". try "help".
(gdb) continue
continuing.
255program exited normally.
若想刪除斷點可以輸入delete break 斷點編號(也可以不輸入編號全部刪除)
若想知道程式在執行過程中變數的值可以輸入:print空格變數名
(gdb) print i
$2 = 1000
注:這個指令可以配合斷點使用。
三,逐步執行程式,可以使用step(s)或者next(n)這裡配合斷點使用
比如斷點設定第一行:
(gdb) break 1
breakpoint 6 at 0x8048384: file moshou.c, line 1.
(gdb) run
the program being debugged has been started already.
start it from the beginning? (y or n) y
starting program: /root/c/moshou
breakpoint 6, main () at moshou.c:4
4 {(gdb) s
main () at moshou.c:7
7 for(i=0;i<1000;i++)
(gdb) s
9 a[i]=-1-i;
(gdb) s
7 for(i=0;i<1000;i++)
(gdb) n
9 a[i]=-1-i;
(gdb) n
7 for(i=0;i<1000;i++)
(gdb)
注:step可進去被呼叫函式 n不可以進入呼叫函式
輸入return從當前函式返回(只能在函式裡使用)
四:輸入quit(q)可以gdb模式
(gdb) q
the program is running. exit anyway? (y or n) y
[root@localhost c]#
除錯工具 gdb
gcc o a.out a.c gdb q a.out break main info register i r objdump d a.out grep a20 main.轉換為機器 objdump m intel d a.out grep a20 main.gdb 設定 1 gdb q 2 se...
gdb除錯工具
檢視幫助一是man 命令,二是進入 www.gnu.org 找到gdb的幫助文件 更詳細 gcc wall g main.c o main,只有這樣才能產生除錯資訊,包括core的除錯資訊。一 常用命令 run r 執行,執行到斷點,重新用r,表示重新開始執行。list l 列出源 l 2,l ma...
GDB除錯工具
mascot 射水魚 gdb官網 gdb適用的程式語言 ada c c objective c pascal 等。gdb的工作方式 本地除錯和遠端除錯。目前release的最新版本為8.0,gdb可以執行在linux 和windows 作業系統上。1.1 what is gdb?1 gdb gnud...