gdb除錯工具

2021-08-15 01:10:38 字數 2801 閱讀 9968

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...