当前位置: 首页 > news >正文

gdb调试功能从零到会(Linux详解)

目录

👀 1.安装gdb

👀2.判断是否安装成功

👀3.改成debug方式发布。

👀 4.gdb功能简介


前言

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

👀 1.安装gdb

直接在命令行输入:sudo yum install -y gdb

即可直接安装成功。

👀2.判断是否安装成功

安装成功后,在命令行直接输入 gdb 或者 gdb --version 进入交互模式。

如图所示:

 当我们进入交互模式后发现无论我们输入什么命令都没有作用(无法调试),只会出现这样的情况:

"/home/bsk/test1/one/test.c": not in executable format: File format not recognized
(gdb) l
No symbol table is loaded.  Use the "file" command.

哪为什么会这样呢?原因很简单,因为gdb在linux中默认是以release版(一般软件进行发布,用户体验模式)的方式来进行发布的,不可以被调试!所以我们要把它改成debug方式(包含调试信息)发布。

👀3.改成debug方式发布。

在命令行输入:vim Makefile(自动化构建工具(多文件操作))

进入之后写如下代码,其中的 -g选项就是把其改成debug方式。

  1 mytest:test.c2     gcc $^ -o $@ -g3 4 .PHONY:clean5 clean:6     rm -f mytest7                 

现在再make一下就会生成对应的mytest(debug版)

以上是详细内容,方便从根上理解。

而我们在日常使用时直接在 gcc命令下添加 -g 选项即可,再直接gdb就可。如下图所示:

👀 4.gdb功能简介

接下来就可以进行gdb使用了,简单介绍其几个功能如下:

     l:显示代码(l+数字:可以从你输入的数字开始显示,但会出现和其相关的上下文)

(gdb) l
1	#include <stdio.h>
2	int main()
3	{
4	   printf("long time no see\n");
5	   fflush(stdout);
6	   sleep(2);
7	   return 0;
8	}
(gdb) 

     b+行号:打断点

(gdb) b 5
Breakpoint 1 at 0x40060b: file test.c, line 5.
(gdb) 

      info b :查看断点编号信息(如下所示)

(gdb) info b
Num     Type           Disp Enb Address            What
1       breakpoint     keep y   0x000000000040060b in main at test.c:5breakpoint already hit 1 time
2       breakpoint     keep y   0x0000000000400601 in main at test.c:2
(gdb) 

     d+编号:删除断点(不要输入以前打断点的行号,要输入查看断点信息里面的对应的Num号)

(gdb) d 1
(gdb) info b
Num     Type           Disp Enb Address            What
2       breakpoint     keep y   0x0000000000400601 in main at test.c:2
(gdb) 

      r :运行程序(遇到断点会停下来,没有断点直接运行到最后)

(gdb) r
Starting program: /home/bsk/test1/one/a.out 
long time no seeBreakpoint 1, main () at test.c:5
5	   fflush(stdout);
Missing separate debuginfos, use: debuginfo-install glibc-2.17-317.el7.x86_64
(gdb) 

在第5行停了下来。(最后一行提示缺少一个工具,复制安装就可以,或者不用管)

       n:单步执行语句(对应vs逐过程,不进入函数内部)

(gdb) n
6	   sleep(2);
(gdb) 

       finish :结束函数调用,然后停下来。

       s:进入函数内部(对应vs逐语句)

       until +行数:跳转到指定行

        display +名称:常显示(对应vs中的监视)

        undisplay +编号:取消常显示(监视)

 

http://www.lryc.cn/news/7269.html

相关文章:

  • 【C语言学习笔记】:数组、指针相关面试题
  • go语言环境配置 项目启动
  • Springboot 使用插件 自动生成Mock单元测试 Squaretest
  • 「JVM 执行引擎」栈架构的字节码的解释执行引擎
  • SSM项目-商城后台管理系统
  • 什么是装运单IFTMIN?
  • 深度负反馈
  • 【每日随笔】手指训练 ( 产品需求探索、技术无关 | 手指训练作用 | 哪些人需要手指训练 | 手指操 | 手指康复训练器材 )
  • Apple Safari 16.3 - macOS 专属免费浏览器 (独立安装包免费下载)
  • 【java】Spring Boot --Spring Boot 集成 MyBatis
  • python正则表达式
  • 【C++】二叉树的非递归遍历
  • Linux——线程同步(条件变量、POSIX信号量)和线程池
  • leaflet 上传CSV文件,导出geojson格式文件(064)
  • Java内部类
  • Centos系统里运行java的jar包
  • 招标采购流程的电子招标采购,是管理复杂供应链和多层供应商的高效方式。
  • 【C语言】C程序结构和基本语法
  • YOLOv8 目标检测 | 自定义数据集
  • Lua语法入门
  • 华为OD机试真题JAVA实现【最小步骤数】真题+解题思路+代码(20222023)
  • 预检请求OPTIONS
  • 引入短信服务发送手机验证码进行安全校验
  • opencv绘制直线
  • Seata源码学习(五)- Seata服务端(TC)源码解读
  • 低版本jQuery导致XSS Nuclei FUZZ POC
  • 【Linux】进程的描述组织与进程状态
  • 8.2.1.1 WHERE 子句优化
  • 拆个微波炉,分析一下电路
  • DM8:DMDSC共享存储集群搭建-共享存储绑定