Linux下的强大工具gdb的使用(详细)

首先先说一下gdb是什么东西?

gdb是GNU开源组织发布的一个强大的UNIX下的程序调试工具。

一般来说,gdb主要帮忙你完成下面四个方面的功能:

启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。
可让被调试的程序在你所设置指定的断点处停住。(断点可以是条件表达式)
当程序被停住时,可以检查此时你的程序中所发生的事。
动态的改变你程序的执行环境。
 

让我们在了解两个版本:Debug版本和Release版本,

Debug版本可以称为“可调试版本”,它包含了大量的调试信息,并且不进行任何优化,便于程序员调试。Debug模式下生成两个文件,除了生成.exe或.dll文件外,而且生成一个.pdb文件,该文件记录了代码中断点等调试信息。(调试信息是在编译阶段就要添加到文件中的)
Release版本可以成为“发行版本”,因为它是面对用户的,所以它不需要包含任何调试信息,且在编译期间对程序进行优化,使得程序在代码大小和运行速度上都是最优的。Release模式下生成一个.exe或.dll文件。

先来看一下gdb调试的命令:

接下来我们用一个例子进行对其调试:

#include<stdio.h>
#include<string.h>
int add(int a,int b)
{
return a+b;
}
int sub(int a,int b)
{
return a-b;
}
int main()
{
int a=10;
int b=20;
printf("a+b=%d\n",add(a,b));
printf("a-b=%d\n",sub(a,b));
return 0;
}

gdb调试需要的是Debug版本的可执行文件,而不需要Release版本的,

所以我们编译阶段要注意加上调试信息,使用编译器的-g参数可以做到这一点。

如在编译阶段时,加入调试信息(gcc -c main.c -g)

或者一步生成可执行文件时加上调试信息(gcc -o main main.c -g)

如果没有-g,你将看不见程序的函数名、变量名,所代替的全是运行时的内存地址。

 

我们对其进行编译:

gcc -o  math math.o -g   // 编译文件,生成可执行程序,并且给文件加上调试信息

1. 启动调试

2. 显示main()附近的代码:l

如果找的是第5行附近的代码“list  5”:

3. 在某一行添加断点:b 行号

4. 在函数入口处添加断点:b 函数名

5. 查看断点信息info 断点 

6.开始运行程序run (r)

 

7. 逐步执行:s( step ) 遇到函数进入函数执行:

8.查看某个变量的变化:print 变量名(p 变量名)

9.看函数的堆栈:bt

10. 结束调试:finish

1. 退出调试:q

以上就是所说的gdb调试的过程与一些命令。望各位都可以熟练的使用!!!    

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值