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使用简易教程的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

(0)

相关推荐

  • 如何使用GDB调试PHP程序

    一般来说,GDB主要完成下面四个方面的功能: (1)启动你的程序,可以按照你的自定义的要求随心所欲的运行程序. (2)可让被调试的程序在你所指定的调置的断点处停住.(断点可以是条件表达式) (3)当程序被停住时,可以检查此时你的程序中所发生的事. (4)动态的改变你程序的执行环境. 1.简介 GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具.如果你是在 UNIX平台下做软件,你会发现GDB这个调试工具有比VC.BCB的图形化调试器更强大的功能.同时GDB也具有例如ddd这样的图形化

  • 通过GDB学习C语言的讲解

    对于那些具有高级编程语言诸如: Ruby.Scheme.Haskell 等背景的人来说,学习 C 语言是具有挑战性的.除了纠结于 C  语言中像手动内存管理和指针等底层特性外,你必须在没有 REPL ( Read-Eval-Print Loop ) 的条件下完成工作.一旦你已经习惯于在 REPL 环境下进行探索性的编程,必须进行"编写-编译-运行"这样循环实在有点令人生厌. 最近我发现其实可以用 GDB 来作为 C 语言的伪 REPL.我一直尝试使用 GDB 作为学习 C 语言的工具,

  • gdb调试命令的使用及总结

    1.基本命令 1)进入GDB #gdb test test是要调试的程序,由gcc test.c -g -o test生成.进入后提示符变为(gdb) . 2)查看源码 (gdb) l 源码会进行行号提示. 如果需要查看在其他文件中定义的函数,在l后加上函数名即可定位到这个函数的定义及查看附近的其他源码.或者:使用断点或单步运行,到某个函数处使用s进入这个函数. 3)设置断点 (gdb) b 6 这样会在运行到源码第6行时停止,可以查看变量的值.堆栈情况等:这个行号是gdb的行号. 4)查看断点

  • 基于c语言中调试工具的用法汇总(不包含gdb)

    是不是只有编译的时候才知道程序写了错误?有没有在未编译的时候就让机器帮你检查错误的工具呢?答案是:有!! splint工具.用一个最简单的HELLO WORLD来表述:===================================== 复制代码 代码如下: /*错误很明显*/#include <stdio.h> int main(void){   print("hello world\n", s);   return} -----------------------

  • Linux应用调试使用gdb和gdbserver命令详解

    1.gdb和gdbserver调试原理 通过linux虚拟机里的gdb,来向开发板里的gdbserver发送命令,比如设置断点,运行setp等,然后开发板上的gdbserver收到命令后,便会执行应用程序做相应的动作,来实现调试的功能 和之前学的裸板GDB调试 一样,只不过之前学的是在win下的,本次是在linux里的gdb 1.1同样,它们都会需要一个带调试信息的编译文件. 通过Makefile里的arm-linux-gcc  -g 来的,     -g:表示编译文件里包含gdb调试信息 1.

  • 基于Linux调试工具strace与gdb的常用命令总结

    strace和gdb是Linux环境下的两个常用调试工具,这里是个人在使用过程中对这两个工具常用参数的总结,留作日后查看使用.strace调试工具strace工具用于跟踪进程执行时的系统调用和所接收的信号,包括参数.返回值.执行时间.在Linux中,用户程序要访问系统设备,必须由用户态切换到内核态,这是通过系统调用发起并完成的.strace常用参数:-c 统计每种系统调用执行的时间.调用次数.出错次数,程序退出时给出报告-p pid 跟踪指定的进程,可以使用多个-p同时跟踪多个进程-o file

  • linux中gdb的入门使用教程

    前言 gdb是linux下非常好用的一个调试工具,虽然它是命令行模式的调试工具,但是它的功能强大到你无法想象,这里简单介绍下gdb的使用方法,需要的朋友们下面来一起看看详细的介绍吧. 断点 在代码的指定位置中断,使程序在此中断. break <function> 在进入指定函数时停住 break <linenum> 在指定行号停住. break +/-offset 在当前行号的前面或后面的offset行停住.offiset为自然数. break filename:linenum 在

  • 使用GDB调试多线程实例详解

    先写一段多线程程序. makefile 加上 -g参数生成可调式信息, 可以进行调试. pthread不是Linux下的默认的库,也就是在链接的时候,无法找到phread库中哥函数的入口地址,于是链接会失败.在gcc编译的时候,附加要加 -lpthread参数即可解决. gdb test 进入调试 需要调试的地方打下断点,run运行到断点处. r 运行到断点处,info thread可以查看被调试的线程. thread apply all bt 让所有线程打印堆栈信息 set scheduler

  • CentOs下安装gcc/g++/gdb的方法

    Centos支持使用yum安装,安装软件一般格式为yum install .......,注意安装时要先成为root用户,且在联网的状态下. 使用yum安装gcc:yum install gcc 使用:which gcc 查看是否安装成功 使用yum安装g++:yum install gcc-c++   使用:which g++  查看是否安装成功 gdb安装 方法一:使用yum安装:yum install gdb 总结 以上所述是小编给大家介绍的CentOs下安装gcc/g++/gdb的方法,

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

    本文所述主要是Linux调试工具GDB的使用教程,具体如下. 声明:本博客内容是由本人经过实验楼教程整理得来. GDB的相关概念 GDB, 是 The GNU Project Debugger 的缩写, 是 Linux 下功能全面的调试工具.GDB 支持断点.单步执行.打印变量.观察变量.查看寄存器.查看堆栈等调试手段.在 Linux 环境软件开发中,GDB 是主要的调试工具,用来调试 C 和 C++ 程序. GDB的相关操作 下面给出一个具有buging.c的程序: [yqtao@localh

  • Jdk1.8的安装简易教程(Linux和windows)

    jdk (SunMicrosystems针对Java开发员的产品) JDK是 Java 语言的软件开发工具包,主要用于移动设备.嵌入式设备上的java应用程序.JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具. 本文重点给大家介绍Jdk1.8的安装简易教程,具体内容如下所示: 1.1 JDK1.8下载地址 JDK下载:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-dow

  • ubuntu18.04安装搜狗拼音的简易教程

    1.下载好搜狗安装包http://pinyin.sogou.com/linux/ ,注意位数! 2.打开终端安装依赖 sudo apt install libfcitx-qt0 3.提取下载好的搜狗安装包到临时文件夹 unpack cd /下载包所在目录路径/ dpkg-deb -R sogoupinyin_2.2.0.0102_amd64.deb unpack/ 4.修改搜狗安装包文件 编辑 unpack/DEBIAN/control 把 Depends: 那一行里面的   fcitx-lib

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

    前言   在现在这个网络越发便捷的社会,各种网络勒索病毒层出不穷,即使是Google浏览器也是在不断的更新版本修复漏洞.很多人认为只有Windows系统才容易中病毒,若使用Linux系统就不容易中病毒,经常让自己的电脑裸奔运行,既不装杀毒软件,也不开启防火墙.其实Linux下也是存在中病毒的可能的,只是那些病毒几乎是无法像在Windows系统下一样自动运行的,Linux的特性决定了很多时候都需要你给予root权限软件才能运行,这确实使电脑中病毒的几率大大降低了,但是不管你的Linux系统是ubu

  • Mysql 5.7.20压缩版下载和安装简易教程

    一.下载地址: http://dev.mysql.com/downloads/mysql/ http://www.jb51.net/softs/451120.html 1.进入官网下载,显示的应该是最新版本,选择第二个(mysql5.7.20-winx64.zip) 2.下载完成后,直接解压到自定义目录,解压目录就是安装目录 二.配置环境变量 1.新增环境变量,例: 变量名:MYSQL_HOME 变量值:D:\mysql\mysql5.7.20-winx64 2.修改环境变量PATH 在PATH

  • 无桌面的linux安装VMWare Tools配置教程

    本文为大家分享了linux安装VMWare Tools配置教程,供大家参考,具体内容如下 1.在vmware虚拟机选项下,选择安装vmware-tools 2.将vmware安装目录下的linux.iso装载到系统中 2.1.选择需安装VMWareTools的虚拟机,右击--可移动设备--CD/DVD--设置 2.2.选择CD/DVD(SATA)--使用ISO映像文件--选文件--打钩设备状态下的"已连接"--确定 3.在系统中输入如下命令挂载:mount /dev/cdrom /mn

  • LINUX 生产环境搭建推荐教程

    由于linux生产环境搭建步骤非常多,很繁琐而且又是必不可少的步骤.虽然已经做过很多次,但是由于步骤繁琐,很容易忘记,下面小编抽个时间把linux生产环境搭建步骤记录下来,分享在我们平台,以便需要之时使用 登录远程MySQL mysql -h 192.168.1.100 -u root -p 给MySQl非root账户分配权限 给账号user1 密码为123456 的用户testDB数据库的所有表的select,insert,update,delete权限: grant select,inser

  • Linux Shell 脚本编程入门教程

    从程序员的角度来看, Shell本身是一种用C语言编写的程序,从用户的角度来看,Shell是用户与Linux操作系统沟通的桥梁.用户既可以输入命令执行,又可以利用 Shell脚本编程,完成更加复杂的操作.在Linux GUI日益完善的今天,在系统管理等领域,Shell编程仍然起着不可忽视的作用.深入地了解和熟练地掌握Shell编程,是每一个Linux用户的必修 功课之一. Linux的Shell种类众多,常见的有:Bourne Shell(/usr/bin/sh或/bin/sh).Bourne

  • linux 服务版安装简易说明书

    安装基本环境 1.ubuntu 下载 下载地址:http://releases.ubuntu.com/14.04.4/ 2.安装virtualBox 直接在软件管家中下载即可 3.安装ubuntu 注意:磁盘空间最好开辟大点,否则后面不够用只能挂载 安装的过程中,把OpenSSH(使用加密的远程登录实现,可以有效保护登录及数据的安全)选上 在virtualBox中设置为桥接网卡,使虚拟机在一个局域网内部,重启虚拟机生效 登录,ifconfig 查看虚拟机局域网中的ip 4.安装 SecureCR

随机推荐