GDB是GNU Debuger的简称,是GNU发布的一款unix下应用程序调试工具。它被广泛使用在各个产家各种应用中。GDB和所有常用的调试工具一样,它的主要功能有:监视变量的值、设置断点及单步执行。
注意,在源程序编译时,要使用gcc -g 或 cc -g 或 g++ -g将源程序编译成可执行文件,然后才能使用gdb进行调试。只有这样,生成的可执行文件才包含调试信息。
参考别人的写一个简单的c程序,在linux下使用gcc编译成可执行文件,然后使用gdb进行调试。
程序源代码如下
#include
intfunc(intn)
{
intsum=0,i;
for(i=0; i
{
sum+=i;
}
returnsum;
}
intmain()
{
inti;
longresult = 0;
for(i=1; i<=100; i++)
{
result += i;
}
printf("result[1-100] = %d \n\r", result );
printf("result[1-250] = %d \n\r", func(250) );
}
使用gcc -g变成生成可执行文件miki,方法为 gcc -g miki.c -o miki
使用gdb开始调试miki应用,如下:
01.$gdb miki
02.GNU gdb (GDB) CentOS (7.0.1-42.el5.centos)
03.Copyright (C) 2009 Free Software Foundation, Inc.
04.License GPLv3+: GNU GPL version 3 or later
05.This is free software: you are free to change and redistribute it.
06.There is NO WARRANTY, to the extent permitted by law. Type "show copying"
07.and "show warranty" for details.
08.This GDB was configured as "x86_64-RedHat-linux-gnu".
09.For bug reporting instructions, please see:
10.…
11.Reading symbols from /u01/home/Oracle/miki…done.
12.(gdb) l 1
13.1 #include
14.2
15.3 int func(int n)
16.4 {
17.5 int sum=0,i;
18.6 for(i=0; i
19.7 {
20.8 sum+=i;
21.9 }
22.10 return sum;
23.(gdb)
24.11 }
25.12
26.13
27.14 main()
28.15 {
29.16 int i;
30.17 long result = 0;
31.18 for(i=1; i<=10; i++)
32.19 {
33.20 result += i;
34.(gdb)
35.21 }
36.22
37.23 printf("result[1-10] = %d \n\r", result );
38.24 printf("result[1-5] = %d \n\r", func(5) );
39.25 }
40.(gdb)
41.Line number 26 out of range; miki.c has 25 lines.
42.(gdb) r
43.Starting program: /u01/home/oracle/miki
44.warning: no loadable sections found in added symbol-file system-supplied DSO at 0x2aaaaaaab000
45.result[1-10] = 55
46.result[1-5] = 10
47.Program exited with code 023.
l 1 表示显示源码第一行开始的10行记录,可以写成list 1
l 表示显示源码中间的前后10行记录,可以写成list
空白回车 表示重复上一次命令操作
r 表示程序开始运行
01.(gdb) b 23
02.Breakpoint 1 at 0x4004f2: file miki.c, line 23.
03.(gdb) info b
04.Num Type Disp Enb Address What
05.1 breakpoint keep y 0x00000000004004f2 in main at miki.c:23
06.(gdb) i b
07.Num Type Disp Enb Address What
08.1 breakpoint keep y 0x00000000004004f2 in main at miki.c:23
09.(gdb) break func
10.Breakpoint 2 at 0x40049f: file miki.c, line 5.
11.(gdb) info break
12.Num Type Disp Enb Address What
13.1 breakpoint keep y 0x00000000004004f2 in main at miki.c:23
14.2 breakpoint keep y 0x000000000040049f in func at miki.c:5
15.
16.
17.(gdb) i b
18.Num Type Disp Enb Address What
19.1 breakpoint keep y 0x00000000004004f2 in main at miki.c:23
20.2 breakpoint keep y 0x000000000040049f in func at miki.c:5
21.3 breakpoint keep y 0x000000000040049f in func at miki.c:2
22.(gdb) d 2
23.(gdb) i b
24.Num Type Disp Enb Address What
25.1 breakpoint keep y 0x00000000004004f2 in main at miki.c:23
26.3 breakpoint keep y 0x000000000040049f in func at miki.c:2
27.(gdb) delete 3
28.(gdb) i b
29.Num Type Disp Enb Address What
30.1 breakpoint keep y 0x00000000004004f2 in main at miki.c:2