GDB简单应用

简单示例:

#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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值