简单示例:
#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 on6.查看栈信息backtrace 活着btframe 或 f7. 查看原程序list 或者l8. 查看源代码内存info line tst.c:func查看汇编代码:disassemble func9. 参看运行数据print /<f> <expr> f为数据格式查看数组:(gdb) p *array@lendisplay/<fmt> <expr>查看寄存器:info registersinfo all-registers