linux 下 GDB调试器的使用(初学者)

linux下GDB调试器的使用

在这里插入图片描述

调试(debug)


一个程序生成可执行文件之后,就会进入程序的调试环节,对于一些小程序,有些不用调试就能看出问题,而当程序扩大到几千几万行,这个时候,调试就显得重中之重了。所以聪明的程序猿们给所有的程序 都配上了一套完整的装备,在linux操作系统最为出色的就是GDB调试器了,话不多说让我们一起跑起来!

  • 创建一个循环(为了能看起来明显,尽量多循环几次)
#include <stdio.h>
int main()
{
	int i ,j = 1;
	for(i = 1; i <= 10; i++)
	{
		j *= i;
		printf("factorial i =%d\n",i,j);
	}
	return 0;
}

一个很简单的求阶乘的程序,我们从它入手做调试,
首先直接运行的结果是这样的
在这里插入图片描述

  • 接下来我们进入GDB
    进入GDB只需要gdb 加上可执行文件就行了,这里注意要使用gdb调试器的可执行文件一定要在编译的时候加上-g ,不然在用很多gdb调试指令时候会无法使用并提示No symbol table is loaded. Use the “file” command.
	gcc -g GDB.c -o GDB
	gdb GDB

在进入后会出现你的ubuntu安装的gdb的版本信息
在这里插入图片描述
,进入gdb指令行,在(gdb)后面加上 run开始运行程序

在这里插入图片描述

  • 显示代码
    用(gdb)l或者list显示文件,根据ubuntu配置不同也会一次显示不同的行数(比如我就一次显示的10行)在这里插入图片描述

  • 设置断点
    (gdb)b加行号设置断点,断点可以设置很多个。
    在这里插入图片描述
    设置完断点后,可以用(gdb)info b 来查看断点,断点设置情况会打印在屏幕上

  • run运行
    终于来到了最重要的一步,这一步做好了将带我们走向人生巅峰,兄弟们做好准备:
    (gdb)run 运行程序,在这里就可以观察程序走向,程序在断点之前就会停下来,断点的那一行并不运行。
    在这里插入图片描述
    用(gdb)p j查看变量j当前值,或者用display j一直查看j的值
    在这里插入图片描述
    发现 j 的值为1,而第一次运行没有进入循环的 j 的初值也的确为1,完全吻合,接下来就可以(gdb)next 进行一行一行的运行了,如果遇到涉及到变量值改变的运算时,就可以用 p 加变量名查看当前值。如果懒得一次一次输入next的话(懒不一定是坏事,只要懒到了点,也便成了智[]( ̄▽ ̄)*),直接用(gdb)c
    (continue的意思),程序就会运行到程序结束或者下一个断点前停止啦,如果没有设置其他断点,程序直接运行到结束。
    在这里插入图片描述

  • step进入函数
    遇到函数的时候,最好在进入函数的时候设置断点,用step命令进入函数

  • 退出gdb
    如果想退出gdb调试器,直接(gdb)q 或者CTRL+z直接结束进程(不是特别时候不建议使用)。到此调试的一般流程就到此结束,其他的指令例如break、
    clear等等可以在Ubuntu 中man gdb 或者翻阅资料或手册了解。
    (很多初学者不喜欢调试,觉得太麻烦,但是掌握调试后才能更加容易的解决遇到的一些未知问题,才能多一种趣味,共勉吧!)
    ! ------来自一个奋斗的猿!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值