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

news2024/11/24 15:29:53

目录

👀 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.c
  2     gcc $^ -o $@ -g
  3 
  4 .PHONY:clean
  5 clean:
  6     rm -f mytest
  7                 

现在再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:5
	breakpoint 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 see

Breakpoint 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.coloradmin.cn/o/346529.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

18- Adaboost梯度提升树 (集成算法) (算法)

Adaboost 梯度提升树: from sklearn.ensemble import AdaBoostClassifier model AdaBoostClassifier(n_estimators500) model.fit(X_train,y_train) 1、Adaboost算法介绍 1.1、算法引出 AI 39年&#xff08;公元1995年&#xff09;&#xff0c;扁鹊成立了一家专治某疑难杂症…

ubuntu18.04 天选2 R95900hx 3060显卡驱动安装

天选2 R95900hx 3060显卡驱动安装需求问题解决内核集显显卡驱动需求 外接显示器&#xff0c;安装nvidia驱动 问题 由于一开始直接在软件和更新中附加读懂安装了nvidia-470&#xff0c;导致系统黑屏。 解决 grub页面系统选择进入ubuntu recovery模式&#xff0c;选择root&a…

ChatGPT模型采样算法详解

ChatGPT模型采样算法详解 GPT&#xff08;Generative Pre-trained Transformer&#xff09;模型有几个参数&#xff0c;理解它们对文本生成任务至关重要。其中最重要的一组参数是temperature和top_p。二者控制两种不同的采样技术&#xff0c;用于因果语言模型&#xff08;Cau…

BCMA靶点药物销售市场-上市药品前景分析

在之前的二十多年里&#xff0c;治疗多发性骨髓瘤(MM)的药物选择发生了重大转变&#xff0c;无论是新诊断还是复发/难治期。新药类别的引入&#xff0c;如蛋白酶体抑制剂、免疫调节剂、抗CD38和抗SLAMF7单克隆抗体&#xff0c;加上自体干细胞移植&#xff0c;使该疾病的五年生存…

Android无菜单键,如何触发onCreateOptionsMenu(Menu menu)

文章目录小结问题及解决无法触发onCreateOptionsMenu(Menu menu)修改配置文件解决使用一个按钮来触发其它办法参考小结 现在的Android有三个键&#xff1a; 任务键&#xff0c;Home键&#xff0c;返回键&#xff0c;也就是没有菜单键了&#xff0c;那么如何如何触发onCreateOp…

TensorRT的功能

TensorRT的功能 文章目录TensorRT的功能2.1. C and Python APIs2.2. The Programming Model2.2.2. The Runtime Phase2.3. Plugins2.4. Types and Precision2.5. Quantization2.6. Tensors and Data Formats2.7. Dynamic Shapes2.8. DLA2.9. Updating Weights2.10. trtexec本章…

狂神 VUE笔记

文章目录0 VUE相关了解0.1 概述0.2 MVVM0.3 JavaScript框架0.4 [Vue](https://so.csdn.net/so/search?qVue&spm1001.2101.3001.7020)的七大属性1 VUE基础1.0 第一个vue代码&#xff1a;Hello&#xff0c;vue1.1 v-bind1.2 v-if &#xff0c; v-else &#xff0c; v-else-i…

Burp Suite Professional 2023.2 (macOS, Linux, Windows) - Web 应用安全、测试和扫描

Burp Suite Professional, Test, find, and exploit vulnerabilities. 请访问原文链接&#xff1a;https://sysin.org/blog/burp-suite-pro-2023/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;www.sysin.org Burp Suite Professional&…

【Spring】一文带你吃透AOP面向切面编程技术(下篇)

个人主页&#xff1a; 几分醉意的CSDN博客_传送门 上节我们介绍了什么是AOP、Aspectj框架的前置通知Before传送门&#xff0c;这篇文章将继续详解Aspectj框架的其它注解。 文章目录&#x1f496;Aspectj框架介绍✨JoinPoint通知方法的参数✨后置通知AfterReturning✨环绕通知Ar…

mysql数据库完全备份和增量备份与恢复

mysql数据备份&#xff1a; 数据备份方式 物理备份&#xff1a; 冷备&#xff1a;.冷备份指在数据库关闭后,进行备份,适用于所有模式的数据库热备&#xff1a;一般用于保证服务正常不间断运行&#xff0c;用两台机器作为服务机器&#xff0c;一台用于实际数据库操作应用,另外…

基于stm32mp157的嵌入式linux+qt项目实战物联网毕业设计选题之智慧医疗项目

stm32mp157开发板FS-MP1A是华清远见自主研发的一款高品质、高性价比的Linux单片机二合一的嵌入式教学级开发板。开发板搭载ST的STM32MP157高性能微处理器&#xff0c;集成2个Cortex-A7核和1个Cortex-M4 核&#xff0c;A7核上可以跑Linux操作系统&#xff0c;M4核上可以跑FreeRT…

吃瓜教程 | Datawhale 打卡(Task 01)

第1章 绪论 引言 机器学习致力于研究如何通过计算的手段&#xff0c;利用经验来改善系统自身的性能。 “经验”通常以“数据”的形式存在。 机器学习研究的主要内容&#xff1a; 在计算机上从数据中产生“模型”&#xff08;model&#xff09;的算法&#xff0c;即“学习算法…

软件开发风险 需要规避的4个重点

1、前期减少投资 开发软件&#xff0c;最好减少前期的投入。软件开发成本高低是取决于所需开发的功能&#xff0c;需求越多&#xff0c;需要实现的功能越多&#xff0c;开发成本就越高。在不确定开发软件能够带来预期价值的情况下&#xff0c;建议先开发核心功能&#xff0c;辅…

分享166个HTML医疗保健模板,总有一款适合您

分享166个HTML医疗保健模板&#xff0c;总有一款适合您 166个HTML医疗保健模板下载链接&#xff1a;https://pan.baidu.com/s/1tBFEInec5Jnw_ShQd21MJg?pwdakif 提取码&#xff1a;akif Python采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 import os import shuti…

【残差稠密网络:医学图像:超分】

Residual dense network for medical magnetic resonance images super-resolution &#xff08;医学磁共振图像超分辨率的残差稠密网络&#xff09; 高分辨率磁共振成像&#xff08;MRI&#xff09;有助于专家定位病灶和诊断疾病&#xff0c;但高分辨率MRI难以获得。此外&am…

PyQt5数据库开发1 4.2 配置SQL Server 2008 数据源(ODBC编程)

文章目录 配置SQL Server 2008 数据源&#xff08;ODBC编程&#xff09; 1. 了解要配置的数据源服务器名称&#xff0c;以及数据库和对应表 2. 打开控制面板&#xff0c;点击管理工具 3. 双击数据源 4. 选择“用户DSN”选项卡&#xff0c;点击“添加” 5. 选择SQL Serv…

晚上下班之后可以做什么副业,业余时间需要利用起来

对大多数普通人来说&#xff0c;他们晚上有很多空闲时间&#xff0c;但他们总是在手机上玩游戏&#xff0c;刷视频&#xff0c;白白度过一夜。事实上&#xff0c;近年来&#xff0c;很多朋友都想利用晚上的时间做一些副业&#xff0c;因为目前的工资已经不能满足自己的需求&…

第05章_MySQL排序与分页

第05章_排序与分页 讲师&#xff1a;尚硅谷-宋红康&#xff08;江湖人称&#xff1a;康师傅&#xff09; 官网&#xff1a;http://www.atguigu.com 1. 排序数据 如果没有使用排序操作&#xff0c;默认情况下查询返回的数据时按照添加数据的顺序显示的 SELECT employee_id, la…

yocto创建自己的machine

前面讲了如何离线构建yocto工程&#xff0c;这节讲如何创建自己的machine&#xff0c;在初始化yocto启动bitbake需要输入如下命令 DISTROfsl-imx-fb MACHINEimx6ull14x14evk source imx-setup-release.sh -b build其中DISTRO用来指定发行版本 MACHINE用来指定硬件平台 build为构…

HTML复习1

VSCode 工具生成骨架标签新增代码 < !DOCTYPE html>表示的什么意思&#xff1f; 这句代码的意思是&#xff1a;当前页面采取的是HTML5版本来显示网页. 注意&#xff1a; < !DOCTYPE> 声明位于文档中的最前面的位置&#xff0c;处于 < html> 标签之前。< …