gdb调试器

目录

一、前言

debug和release

二、调试操作

2.1、退出  quit

2.2、调试 run

2.3、打断点  b

2.4、查看断点 info b

2.5、查看代码 l

2.6、删除断点 d

2.7、逐过程 n

2.8、打印变量内容 p

2.9、逐语句(进入函数) s

2.10、查看函数调用堆栈 bt

2.11、跑完函数 finish

2.12、常显示 dispaly

2.13、取消常显示 undisplay

2.14、跳转到指定行 until

2.15、跳转到下一个断点 c

2.16、disable和enable

三、总结


一、前言

gdb是Linux下的一种调试工具。我们可以使用命令:sudo yum install -y gdb来安装gdb。

注意:        

        1、程序的发布方式有两种,debug模式和release模式,而想进行调试只能在发布方式为debug版本下。
        2、Linux 通过gcc/g++编译出来的二进制程序,默认是release模式,这也就意味着程序无法调试。
        3、在Linux下要使用gdb调试,必须在源代码生成二进制程序的时候,加上 -g 选项。

debug和release

默认情况下,gdb无法进行对现在发布的程序进行调试(默认是release版本)。

首先我们先写一段下面需要使用的代码

#include<stdio.h> 
 int addnum(int m)
 {
     int sum=0;                                                                                                                               
     int i=0;
     for(i=0;i<m;i++)
     {
         sum+=i;
     }
     return sum;
 }
 
 int main()
 {
     int m=10;
     int ret=addnum(m);
     printf("%d\n",ret);
     return 0;
 }
mytest:test.c
	gcc -o $@ $^ -std=c99
.PHONY:clean
clean:
	rm -f mytest mytest_g

然后我们在Makefile中先不加-g选项。这样是不能调试的:

我们给makefile加上-g选项生成debug可执行文件就可以调试;

PHONY:all

all:mytest mytest_g

mytest:test.c
	gcc -o $@ $^ -std=c99
mytest_g:test.c
	gcc -o $@ $^ -std=c99 -g
.PHONY:clean
clean:
	rm -f mytest mytest_g

二、调试操作

注意:gdb会记录最近的一条命令,如果命令无变化,可以直接回车。

        对于下面的指令足以应付我们日常遇到的一些代码进行相关的调试,解决遇到的问题,同时对于gdb的基本使用我们也能够基本掌握

2.1、退出  quit

功能:退出gdb。

演示:

也可以使用q退出

2.2、调试 run

功能:使程序开始进行调试(也可以使用run)(调试运行,在断点处停下来)

演示:

也可以使用r进行调试

2.3、打断点  b

功能:在某一行打上一个断点

语法: b(break)  行数

演示:

2.4、查看断点 info b

功能:查看断点的各种信息。(查看当前设置了哪些断点)

演示:

2.5、查看代码 l

1、语法: l(list)  行号

        list/l 行号:显示从第n行开始的源代码,每次显示10行,若n未给出则默认从上次的位置往下显示。

2、语法: l(list)  函数名

list/l 函数名:列出某个函数的源代码。

演示:

2.6、删除断点 d

功能:删除某一行的断点。

语法:d  断点编号(NUM)

演示:

2.7、逐过程 n

必须在run(r)过程中调试

功能:逐过程调试。使程序一步一步向下执行。相当于vs中的 f10。也可以用next。

演示:

2.8、打印变量内容 p

功能:打印变量的值。

语法:p/print  变量名。

演示:

2.9、逐语句(进入函数) s

功能:逐语句调试。相当于vs的f11。

演示:

2.10、查看函数调用堆栈 bt

功能:查看各级函数调用及参数。

演示:

2.11、跑完函数 finish

功能:执行完当前正在调用的函数后停下来(不能是主函数)。

2.12、常显示 dispaly

功能:将变量加入常显示(每次停下来都显示它的值)。类似于监视。

语法:display  变量名

2.13、取消常显示 undisplay

功能:取消指定编号变量的常显示。

语法:display 编号

演示:

2.14、跳转到指定行 until

功能:跳转到指定行

语法:until 行号。

演示:

2.15、跳转到下一个断点 c

功能:运行到下一个断点处。

演示:

2.16、disable和enable

disable 断点编号 :禁用指定编号的断点。

 enable 断点编号  :启用指定编号的断点。

三、总结

        至此,所有Linux下的基础工具都已经学完了。有了这些工具,我们可以在Linux下进行代码的编写,编译和调试。使我们在Linux下编写代码显得十分方便。 

相关推荐

  1. Linux设备调试-GDB调试器

    2024-06-09 17:48:03       51 阅读
  2. GDB调试

    2024-06-09 17:48:03       32 阅读
  3. Linux调试器---gdb

    2024-06-09 17:48:03       49 阅读
  4. GDB调试crashdump

    2024-06-09 17:48:03       72 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-09 17:48:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-09 17:48:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-06-09 17:48:03       82 阅读
  4. Python语言-面向对象

    2024-06-09 17:48:03       91 阅读

热门阅读

  1. 力扣1358.包含所有三种字符的子字符串数目

    2024-06-09 17:48:03       30 阅读
  2. 共识算法之争(PBFT,Raft,PoW,PoS,DPoS)

    2024-06-09 17:48:03       34 阅读
  3. 【Vue2/3】使用Provide/Inject 依赖注入跨组件通信

    2024-06-09 17:48:03       45 阅读
  4. Web前端答辩PPT模板:全面解析与高效呈现

    2024-06-09 17:48:03       34 阅读
  5. Vue3图片懒加载封装自定义指令

    2024-06-09 17:48:03       42 阅读
  6. C语言——共用体

    2024-06-09 17:48:03       33 阅读
  7. Docker:镜像命令和容器命令

    2024-06-09 17:48:03       41 阅读
  8. Spring boot SSL证书路径配置

    2024-06-09 17:48:03       38 阅读