Linux下调试函数-----gcc与gdb的使用

这篇博文主要讲下如何编写程序并使用gdb调试段错误(core dump)

 

何为gdb?---百度百科

UNIXUNIX-like下的调试工具。或许,各位比较喜欢那种图形界面方式的,像VCBCBIDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试工具相比于VCz的优点是具有修复网络断点以及恢复链接等功能。BCB的图形化调试器更强大的功能。所谓寸有所长,尺有所短就是这个道理。

 

GDB四个方面的功能:

1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。

2、可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式

3、当程序被停住时,可以检查此时你的程序中所发生的事。

4、你可以改变你的程序,将一个BUG产生的影响修正从而测试其他BUG


在我们编写完程序之后呢,假装我们想要调试,那么该如何进入gdb模式呢。?文件名是test.c
gcc -g test.c -o test     //-g 为调试选项  -o 为写入文件
gdb test                       //进入gdb模式




这时候的我们就进入了gdb模式,这时候不得不提一下gdb模式下的些许操作选项

 
list (l)                   列出源代码 后面加上行号可从该行开始显示
break (b) 42        在42行设置断点
b 函数名             在函数处设置断点
info break (i b)    显示断点信息
delete i (d i)        删除断点
run (r)                 开始执行
next (n)              单步执行不进入函数,相当于F10
s                        进入函数 F11
print 变量i (p i)   打印变量的值 b 行号
if(i==9)               第几行的断点,在运行到i==9的时候停止
backtrace (bt)    显示函数调用栈的关系
what is i             i是什么类型
enter                  重复上一步操作
finish                 结束函数
q                       退出gdb模式
PS:括号里面皆为首字母,相同含义。

举个有bug的栗子:文件名  test.c

1 #include<stdio.h>

  2 int main()

  3 {

  4     int a;

  5     printf("please enter num:");

  6     scanf("%d", a);//很明显这里没有加取址符&

  7     printf("%d", a);

  8     system("pause");

  9     return 0;

 10 }


然后呢,开始调试:
gcc -g test.c -o test     //-g 为调试选项  -o 为写入文件
file test           //file指令可以看见此时的test已变成ELF格式的可执行文件
./test              //运行程序,然后报core dump段错误
ls                  //打开目录查看段错误



ulimit -a//显示当前各进程的限制,可见core文件大小限制等于0

ulimit -c unlimited//设置成无穷大

ulimit -c  //查看是否设置成功,成功显示unlimited

file core.4798  //假装查看名为4798的段错误文件




gdb ./test core.4798//开始调试,此时可以看到哪块地方程序崩溃掉的



然后我们就知道是这个scanf函数发生的毛病,在添加取址符&之后就可以运行程序啦。。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值