【Linux】Linux调试器——gdb使用

news2025/1/16 5:01:14

前言

学习完 gcc/g++ 后我们已经能够在 Linux 下进行C/C++编程了,但是既然涉及到了编程在怎么能没有调试呢?于是我们想更近一步的话就要学习gdb的使用了。由于Linux的服务器端没有图形化操作界面,用gdb进行调试你可能不太习惯,但这是必须经历的阶段。

gdb的使用

  • 一、关于调试的背景知识
  • 二、gdb的详细使用
    • 1.简单使用
    • 2.调试命令
  • 三、结语


一、关于调试的背景知识

  • 程序的发布方式有两种,debug模式和release模式
    debug模式下发布的程序都是可以调试的程序,
    release模式是正式发布版本是不可进行调试的,
    当然由于这样的差别,debug模式下的程序通常要比release版本下的程序大得多。
    在 Visual Studio 2022 看到的相关模式
    在这里插入图片描述

  • Linux gcc/g++出来的二进制程序,默认是release模式
    要使用gdb调试,必须在源代码生成二进制程序的时候, 加上-g 选项
    在这里插入图片描述
    简单的一个打印程序,可以看出两者的体积差别,在大型项目中这个差别会更加明显。
    在这里插入图片描述

二、gdb的详细使用

1.简单使用

1.调试某个程序

gdb 程序名

在这里插入图片描述

2.退出调试: ctrl + d 或 quit (q)
在这里插入图片描述

2.调试命令

  • list/l 行号:显示源代码,接着上次的位置往下列,每次列10行。
  • list/l 函数名:列出某个函数的源代码。
  • break(b) 行号:在某一行设置断点 break
  • info break :查看断点信息
  • break(b) 函数名:在某个函数开头设置断点 。
    delete breakpoints n:删除序号为n的断点
  • delete breakpoints:删除所有断点
  • r或run:运行程序。
  • n 或 next:单条执行。(逐过程)
  • s或step:进入函数调用 (逐语句)
  • finish:执行到当前函数返回,然后挺下来等待命令
  • print( p ):打印表达式的值,通过表达式可以修改变量的值或者调用函数,
  • p 变量:打印变量值
  • breaktrace(或bt):查看各级函数调用及参数
  • display 变量名:跟踪查看一个变量,每次停下来都显示它的值
  • undisplay:取消对先前设置的那些变量的跟踪
  • until X行号:跳至X行
  • set var:修改变量的值
  • info(i) locals:查看当前栈帧局部变量的值
  • continue(或c):从当前位置开始连续而非单步执行程序 ,相当于运行到下一个断点。
  • disable breakpoints:禁用断点
  • enable breakpoints:启用断点

  • list/l 行号:显示源代码,接着上次的位置往下列,每次列10行。

在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述

  • break(b) 行号:在某一行设置断点 break
  • info break :查看断点信息

在这里插入图片描述

  • break(b) 函数名:在某个函数开头设置断点 。

在这里插入图片描述

  • delete breakpoints n:删除序号为n的断点
  • delete breakpoints:删除所有断点

在这里插入图片描述
在这里插入图片描述

  • r或run:运行程序。

不设立断点,直接运行结束

在这里插入图片描述

  • n 或 next:单条执行。(逐过程)

在这里插入图片描述

在这里插入图片描述

  • s或step:进入函数调用 (逐语句)

在这里插入图片描述
在这里插入图片描述

  • finish:执行到当前函数返回,然后挺下来等待命令

在这里插入图片描述

  • print( p ):打印表达式的值,通过表达式可以修改变量的值或者调用函数,
  • p 变量:打印变量值。

重新运行程序

在这里插入图片描述

  • breaktrace(或bt):查看各级函数调用及参数

在这里插入图片描述

  • display 变量名:跟踪查看一个变量,每次停下来都显示它的值
  • undisplay:取消对先前设置的那些变量的跟踪

在这里插入图片描述
在这里插入图片描述

  • until X行号:跳至X行

在这里插入图片描述
在这里插入图片描述

  • set var:修改变量的值

在这里插入图片描述

  • info(i) locals:查看当前栈帧局部变量的值

在这里插入图片描述

  • continue(或c):从当前位置开始连续而非单步执行程序 ,相当于运行到下一个断点。
  • disable breakpoints:禁用断点
  • enable breakpoints:启用断点

三、结语

gdb的使用需要多多操作练习才能掌握,掌握之后在程序的调试中用它会提高的我们的调试效率,当然gdb的功能与使用技巧还不止于此,感兴趣的同学可以继续深入学习。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/178509.html

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

相关文章

凌玮科技将在创业板上市:预计募资净额约8亿元,曾踩雷民生理财

近日,广州凌玮科技股份有限公司(下称“凌玮科技”,SZ:301373)开启申购,并于2023年1月19日披露了首次公开发行股票并在创业板上市网下发行初步配售结果等。本次冲刺上市,凌玮科技的发行价为33.73元/股&#…

【owt-server】webrtc agent

owt server 5.0 代码。m88版本。首选关注js层,作为owner对内部模块的调用 分为三大模块:rtc conn ,rtc framejs 服务以及js 服务都有的微服务框架代码 : addon中初始化全部底层组件 // Copyright (C) <2019> Intel Corporation // // SPDX-License-Identifier: Apach…

ricequant量化的基础是什么?

ricequant量化的基础包括了开仓、买入、止盈、止损方法等等方面&#xff0c;但是在股票量化中要想执行开仓、买入、止损等必须要借助一些股票交易接口来进行数据的存储和获取&#xff0c;其中就包括了通达信接口跟程序化交易接口的结合量化开展&#xff0c;同时注意l2数据接口获…

JAVA中static、final、static final的区别

1 问题当我们在使用java写类的属性时总会用到很多的类型去修饰它&#xff0c;比如字符串String&#xff0c;整数型int&#xff0c;但是我们偶尔也会遇到 static、final、static final&#xff0c;那么他们的区别是什么呢&#xff1f;2 方法finalfinal可以修饰属性、方法、类&am…

linux基本功系列之wc命令实战

文章目录一. wc命令介绍二. 语法格式及常用选项三. 参考案例3.1 统计指定文件的行数&#xff0c;单词数&#xff0c;字节数3.2 统计字节数3.3 只统计单词数3.4 统计字符数3.4 统计行数3.5 统计最长的行的长度总结前言&#x1f680;&#x1f680;&#x1f680; 想要学好Linux&am…

Norbit多波束(iWBMS)和前视声纳(WBMS FLS)的使用简介

Norbit多波束&#xff08;iWBMS&#xff09;是最近两年崛起的轻量级多波束产品&#xff0c;它的换能器是弧形的&#xff0c;与我们平常所见的Reson7125、T50P以及EM2040D的平面换能器不同。它的水下单元集成POS MV&#xff08;Position and Orientation Systems for Marine Ves…

JVM【性能监控与调优】

概述 大厂面试题 支付宝&#xff1a; 支付宝三面&#xff1a;JVM性能调优都做了什么&#xff1f; 小米&#xff1a; 有做过JVM内存优化吗&#xff1f; 从SQL、JVM、架构、数据库四个方面讲讲优化思路 蚂蚁金服&#xff1a; JVM的编译优化 jvm性能调优都做了什么 JVM诊…

Ubuntu下为可执行文件和脚本文件(.sh)生成桌面快捷方式

1、前言在Ubuntu中&#xff0c;有些软件是安装的&#xff0c;如deb的安装包&#xff0c;用dpkg -i安装。 有些软件可能是不需要安装&#xff0c;直接解压tar.gz这类文件直接就可以运行了。 但是每次运行的时候都要输入一遍命令十分麻烦&#xff0c;因此想把它建个快捷方式放到桌…

动态规划算法刷题笔记【状压dp】

二进制枚举子集 a&1 1 判断是否为奇数&#xff0c;如果为1&#xff0c;则为奇数因为奇数二进制末位一定是1&#xff0c;所以 与1 得到的结果是1 例 这里&#xff0c;1<<14——214——第15位是1&#xff0c;可以表示14个1 i&&#xff08;1<<j&#xff09;…

Linux|奇怪的知识---CPU温度监控

前言&#xff1a; 最近我的台式机电脑CPU风扇由于积灰严重&#xff0c;噪音比较大&#xff0c;因此更换了CPU风扇。 更换比较简单没什么好说的&#xff0c;但我想清楚的知道我的CPU温度到底是多少&#xff0c;进而知道这个新风扇是否能给CPU一个清凉的环境&#xff0c;因此需…

20230125使AIO-3568J开发板在Android12下默认为简体中文

20230125使AIO-3568J开发板在Android12下默认为简体中文 2023/1/25 10:05 缘起&#xff1a;国人还是喜欢看简体中文的菜单&#xff01;^_ 百度搜索&#xff1a;rk3568 android 12 中文 CSDN&#xff1a;rk3568 ANDROID11 中文 1、build/make/target/product/full_base.mk Z:\an…

Mongodb下载与安装

Mongodb下载https://pan.baidu.com/s/1mFRK3Cn0jW_ysmC9HaGvzg 提取码&#xff1a;0068 下载完成后解压&#xff1b; 设置数据存储位置&#xff1a; bin目录新建文件夹&#xff1a; data下再新建db文件夹&#xff1a; bin目录下cmd&#xff1b; 设置数据存储位置&#x…

centos7安装RocketMQ教程

安装rocketmq 安装RocketMQ首先你的系统上得有JDK的环境&#xff0c;最低1.8 安装JDK 这里我以centos7为例进行安装 #64位 wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24http%3A%2F%2Fwww.oracle.com%2F; oraclelicenseaccept-securebackup-co…

为 TDesignBlazor 添加暗黑模式

本文将讲述我为 TDesignBlazor 开源项目提交 PR 的经历&#xff0c;主要介绍暗黑模式功能的实现以及之后如何在项目中使用。我将会分享我在实现这一功能时遇到的问题&#xff0c;以及我是如何解决这些问题的。我希望通过我的经历能够鼓励更多的人参与开源项目&#xff0c;为 TD…

CE训练教程进阶,步骤 9: 注入++

目录 一、找出存放四个玩家健康值的地址 二、找出修改数据的代码 三、找出是谁调用了修改指令 四、分析玩家的内存数据 五、注入修改代码 六、C语言代码注入 相对于前面8个步骤&#xff0c;步骤9稍微要难一点&#xff0c;所以单独写。 步骤9是在步骤7的基础上&#xff0c…

Flowable进阶学习(六)网关

文章目录排他网关案例&#xff1a;并行网关案例&#xff1a;包容网关案例&#xff1a;事件网关网关(gateway)用来控制流程的流向。来实现复杂的审批流程。网关的分类包括&#xff1a;排他网关、并行网关、包容网关、事件网关。排他网关 exclusive gateway也成为异域网关XORgat…

Python数据可视化之图表组成元素

1.1绘制 matplotlib 图表组成元素的主要函数matplotlib 是如何组织内容的&#xff1f;在一个图形输出窗口中&#xff0c;底层是一个 Figure实例&#xff0c;我们通常称之为画布&#xff0c;包含一些可见和不可见的元素。在画布上&#xff0c;自然是图形&#xff0c;这些图形就是…

Allegro如何自动居中走线操作指导

Allegro如何自动居中走线操作指导 Allegro支持自动将走线居中到两个孔的中间,避免手动去调整的麻烦,类似下图 具体操作如下 点击Spread Between VoidsOptions选择需要居中走线的层面,并且Void clearance输入0

OpenGL ES着色器语言(GLSL ES)规范 ——上篇

文章目录前言OpenGL ES基础一段基本的着色器代码大小写和分号数据值类型、命名规范、类型转换运算符矢量和矩阵矢量和矩阵类型矢量构造、访问矩阵构造、访问矢量矩阵运算规则特殊类型—结构体和数组结构体数组取样器总结前言 着色器语言通过控制GPU来进行前端图形的渲染&#…

《深入浅出计算机组成原理》学习笔记 Day10

浮点数与定点数1. 浮点数的不精确性2. 定点数的表示3. 浮点数的表示参考1. 浮点数的不精确性 32 比特只能表示 2 的 32 次方个不同的数&#xff0c;差不多是 40 亿个。如果表示的数超过能表示总的个数&#xff0c;那么就会有两个不同的数的二进制表示是一样的。计算机就会不知…