next up previous contents
Next: Python 使用 gdb 除錯 Up: 除錯器 gdb Previous: gdb 簡介   Contents

除錯器 gdb 環境建立

  1. 安裝套件 gdb
    [root@dyH ~]# yum install gdb
    
  2. 以 vim 編輯程式檔 gdbtest1.c
    int main()
    {
    	int a, b, c;
    	a=5;
    	b=10;
    	b+=a;
    	c=b+a;
    	return 0;
    }
    
  3. 編譯程式
    [dywang@dyH gcc]$ gcc -Wall -g -o gdbtest1 gdbtest1.c
    
  4. 執行 gdb 進行除錯,命令 l 列出原始碼
    [dywang@dyH gcc]$ gdb -q gdbtest1
    Reading symbols from gdbtest1...done.
    (gdb) l
    1	int main()
    2	{
    3		int a, b, c;
    4		a=5;
    5		b=10;
    6		b+=a;
    7		c=b+a;
    8		return 0;
    9	}
    
  5. gdb 工具 b 設定中斷點
    (gdb) b 2
    Breakpoint 1 at 0x400478: file gdbtest1.c, line 2.
    
  6. gdb 工具 r 執行程式,發現缺 debuginfos 相關套件。
    (gdb) r
    Starting program: /home/dywang/Documents/latex/clanguage/gcc/gdbtest1 
    
    Breakpoint 1, main () at gdbtest1.c:4
    4		a=5;
    Missing separate debuginfos, use: debuginfo-install glibc-2.12-1.107.el6_4.2.x86_64
    
  7. 缺 debuginfos,先以管理者身份安裝套件
    [root@dyH ~]# vim /etc/yum.repos.d/CentOS-Debuginfo.repo 
    ...
    enabled=1
    
    [root@dyH ~]# debuginfo-install glibc-2.12-1.107.el6_4.2.x86_64
    
  8. 再執行 gdb 工具 r 執行程式,停在中斷點
    (gdb) r
    The program being debugged has been started already.
    Start it from the beginning? (y or n) y
    
    Starting program: /home/dywang/Documents/latex/clanguage/gcc/gdbtest1 
    
    Breakpoint 1, main () at gdbtest1.c:4
    4		a=5;
    
  9. gdb 工具 p 印出目前變數 b 的值為 0
    (gdb) p b
    $1 = 0
    
  10. gdb 工具 n 執行下一步 b 的值變為 10,a 的值變為 5。
    (gdb) n
    5		b=10;
    (gdb) n
    6		b+=a;
    (gdb) p a
    $2 = 5
    (gdb) p b
    $3 = 10
    (gdb) n
    7		c=b+a;
    (gdb) p b
    $4 = 15
    
  11. gdb 工具 n 執行下一步 b 的值變為 15
    (gdb) n
    7		c=b+a;
    (gdb) p b
    $4 = 15
    
  12. gdb 工具 c 連續執行到程式結束,工具 q 退出 gdb。
    (gdb) c
    Continuing.
    
    Program exited normally.
    (gdb) q
    



2015-01-16