Linux调试工具GDB使用简易教程

 更新时间:2018年01月23日 11:06:21   作者:yqtaowhu  
这篇文章主要介绍了Linux调试工具GDB使用简易教程,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下

本文所述主要是Linux调试工具GDB的使用教程,具体如下。

声明:本博客内容是由本人经过实验楼教程整理得来。

GDB的相关概念

GDB, 是 The GNU Project Debugger 的缩写, 是 Linux 下功能全面的调试工具。GDB 支持断点、单步执行、打印变量、观察变量、查看寄存器、查看堆栈等调试手段。在 Linux 环境软件开发中,GDB 是主要的调试工具,用来调试 C 和 C++ 程序。

GDB的相关操作

下面给出一个具有buging.c的程序:

[yqtao@localhost linux]$ cat buging.c 
#include <stdio.h>
int getSum(int n) {
    int sum=0,i;
    for (i=1;i<=n;i++)
        sum+=i;
    return sum;
}
int main(){
    int res=getSum(100);
    printf("1+2+...+100=%d\n",res);
}

如果要调试程序,则在进行gcc编译的时候要加上-g参数

gcc -g -o bugging bugging.c

进入gdb:

gdb buging

部分gdb命令:

// 查看源码
// 查看第几行附近
// 可简写成l 2
(gdb) list 2   
1    #include <stdio.h>
2    int getSum(int n) {
3        int sum=0,i;
4        for (i=1;i<=n;i++)
5            sum+=i;
6        return sum;
7    }

// 查看main函数附近的源码
(gdb) list main
3        int sum=0,i;
4        for (i=1;i<=n;i++)
5            sum+=i;
6        return sum;
7    }
8    int main(){
9        int res=getSum(100);
10       printf("1+2+...+100=%d\n",res);
11   }


// 设置断点
// break +n在第几行设断点
(gdb) break 8
Breakpoint 1 at 0x4004fa: file buging.c, line 8.
// break +函数名 ,在函数名处设断点
(gdb) break getSum
Breakpoint 2 at 0x4004cb: file buging.c, line 3.

//查看断点信息
(gdb) info breakpoints 
Num   Type      Disp Enb Address      What
1    breakpoint   keep y  0x00000000004004fa in main at buging.c:8
2    breakpoint   keep y  0x00000000004004cb in getSum at buging.c:3

断点信息中每一项的信息:

1.Num 列代表断点编号,该编号可以作为 delete/enalbe/disable 等控制断点命令的参数
2.Type 列代表断点类型,一般为 breakpoint
3.Disp 列代表断点被命中后,该断点保留(keep)、删除(del)还是关闭(dis)
4.Enb 列代表该断点是 enable(y) 还是 disable(n)
5.Address 列代表该断点处虚拟内存的地址
6.What 列代表该断点在源文件中的信息

// 删除断点
// delete +n 或 d +n
// 如果不加数字则删除全部的断点
(gdb) d 2
(gdb) info breakpoints 
Num   Type      Disp Enb Address      What
1    breakpoint   keep y  0x00000000004004fa in main at buging.c:8

关闭和启用断点:

有时候,我们会遇到这种情况:有些断点可能暂时不用但又不想删除,那么可以disable.

disable +n //关闭断点
enable +n  //启动断点

GDB单步调试

以本文开头的buging.c文件为例,进行单步调试。

// 进入gdb
[yqtao@localhost linux]$ gdb buging
// 在main()函数处设断点
(gdb) info breakpoints 
// 运行程序
(gdb) run
Breakpoint 1, main () at buging.c:9
9        int res=getSum(100);

注意:我们要进入函数要是用step(s),而单步执行next(n),next是不进入函数内部的,要区分两者的关系。

(gdb) step
getSum (n=100) at buging.c:4
4        for (i=1;i<=n;i++)
// 查看代码
(gdb) l
1    #include <stdio.h>
2    int getSum(int n) {
3        int sum=0,i;
4        for (i=1;i<=n;i++)
5            sum+=i;
6        return sum;
7    }
8    int main(){
9        int res=getSum(100);
10       printf("1+2+...+100=%d\n",res);
// 下一步
(gdb) s
5            sum+=i;
// 打印sum的值
// 看到sum是为赋初值的
(gdb) p sum
$1 = 4195633
// info locals
//打印当前断点处所在函数的所有局部变量的值,不包括函数参数。
(gdb) info locals
sum = 4195635
i = 3

其余的一些命令:

finish

执行程序到当前函数结束

continue

执行程序到下个断点

until

until N,执行程序到源代码的某一行

总结

以上就是本文关于Linux调试工具GDB使用简易教程的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

相关文章

  • linux下使用Apache搭建文件服务器的步骤

    linux下使用Apache搭建文件服务器的步骤

    这篇文章主要介绍了linux下使用Apache搭建文件服务器的步骤,帮助大家更好的搭建服务器,感兴趣的朋友可以了解下
    2020-12-12
  • Linux模拟实现sleep函数

    Linux模拟实现sleep函数

    这篇文章主要为大家详细介绍了Linux模拟实现sleep函数,让程序休眠一定的秒数,到时间后自动恢复运行
    2017-04-04
  • Linux下的ssh安全防护问题

    Linux下的ssh安全防护问题

    这篇文章主要介绍了Linux下的ssh安全防护问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • linux对文件解压或打包压缩的方法

    linux对文件解压或打包压缩的方法

    这篇文章主要介绍了linux对文件解压或打包压缩的方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-12-12
  • Apache Commons DbUtils工具包使用介绍

    Apache Commons DbUtils工具包使用介绍

    这篇文章主要介绍了Apache Commons DbUtils工具包使用介绍,本文介绍了DBUtils是什么东西、熟悉DBUtils的一些问题、API介绍等内容,需要的朋友可以参考下
    2015-03-03
  • linux环境下安装jdk和Tomcat详细步骤

    linux环境下安装jdk和Tomcat详细步骤

    大家好,本篇文章主要讲的是linux环境下安装jdk和Tomcat详细步骤,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收一下,方便下次浏览
    2021-12-12
  • YUM软件包管理工具与yum命令的详细介绍

    YUM软件包管理工具与yum命令的详细介绍

    yum是基于RPM包管理器、为了提高RPM软件包安装性而开发的一种软件包管理器。它能够从指定的服务器自动下载.rpm包并自动安装,可以自动处理依赖性关系,并一次性安装所有依赖的软体包。本文就详细介绍了YUM软件包管理工具与yum命令。有需要的朋友们下面来一起看看吧。
    2017-01-01
  • Ubuntu20.04防火墙设置简易教程(小白)

    Ubuntu20.04防火墙设置简易教程(小白)

    这篇文章主要介绍了Ubuntu20.04防火墙设置简易教程(小白),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • apache中封IP的实现方法

    apache中封IP的实现方法

    最简单的方法是从Apache里封(如果你是用Apache当服务器的话)。你既可以在httpd.conf配置文件里设置,又可以在.htaccess里设置。
    2011-04-04
  • Linux部署python爬虫脚本,并设置定时任务的方法

    Linux部署python爬虫脚本,并设置定时任务的方法

    今天小编就为大家分享一篇Linux部署python爬虫脚本,并设置定时任务的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-06-06

最新评论