简单示例:

#include <stdio.h>

int func(int n)
{
 int sum =0,i;
 for(i=0;i<n;i++)
 {
  sum+=i;
 }
 return sum;
}
/***
*This test gdb programme;
*
***/
int main( int argc, char *argv[] )
{
  int i;
  long result = 0;
  for(i=1; i<=100; i++)
  {
   result += i;
  }
  printf("result[1-100] = %d \n", result );
  printf("result[1-250] = %d \n", func(250) );
  return 0;
}
打开MSYS Shell编译: gcc -g tst.c -o tst

GDB的命令Help

敲入b按两次TAB键,你会看到所有b打头的命令:
(gdb) b 
backtrace break bt
(gdb)
1.设置断点 
break <function>
在进入指定函数时停住。C++中可以使用class::function或function(type,type)格式来指定函数名。
可以设置break if i=100,表示当i为100时停住程序。
2. 观察断点
 
   
watch <expr>
为表达式(变量)expr设置一个观察点。一量表达式值有变化时,马上停住程序。

rwatch <expr>
当表达式(变量)expr被读时,停住程序。

awatch <expr>
当表达式(变量)的值被读或被写时,停住程序。

info watchpoints
列出当前所设置了的所有观察点。
3. 捕捉断点
 
   
catch <event>
当event发生时,停住程序。event可以是下面的内容:
1、throw 一个C++抛出的异常。(throw为关键字)
2、catch 一个C++捕捉到的异常。(catch为关键字)
3、exec 调用系统调用exec时。(exec为关键字,目前此功能只在HP-UX下有用)
4、fork 调用系统调用fork时。(fork为关键字,目前此功能只在HP-UX下有用)
5、vfork 调用系统调用vfork时。(vfork为关键字,目前此功能只在HP-UX下有用)
6、load 或 load <libname> 载入共享库(动态链接库)时。(load为关键字,目前此功能只在HP-UX下有用)
7、unload 或 unload <libname> 卸载共享库(动态链接库)时。(unload为关键字,目前此功能只在HP-UX下有用)
4.清除断点
 
   
clear <linenum>;
clear <function>;
delete [breakpoints] [range...]
disable [breakpoints] [range...]
enable [breakpoints] [range...]
5. 单步执行
 
   
continue [ignore-count] 
step <count> 
next <count>
set step-mode on
6.查看栈信息
 
   
backtrace 活着bt 
frame 或 f
7. 查看原程序
list 或者l
8. 查看源代码内存
 
   
info line tst.c:func
查看汇编代码: 
disassemble func
9. 参看运行数据
 
   
print /<f> <expr> f为数据格式
查看数组:
 
   
 
   
(gdb) p *array@len
 
   
display/<fmt> <expr>
查看寄存器:
info registers
info all-registers