Linux调试------gdb的使用

目录

前言

一、gdb打开可执行程序

二、查看代码与操作断点

1.l 查看代码

2.b 打断点

3.info  b  查看断点信息

4.d   删除断点

5.disable 和 enable 断点的禁用与启用

三、调试 

1.r  启动调试 

2. n  逐过程

3. s  逐语句 

4.display显示变量

5.undisplay 取消显示

四、跳转命令与特殊命令

1.until 跳转到指定行

2. c  跳转到断点处

3.finish 运行到当前函数结尾

4.bt 查看调用堆栈

5. set var  修改变量值


前言

在vs2022,有可视化界面,我们调试起来非常简单,点一点就行了,在linux下,如果我们需要调试代码,就得用到工具gdb。

没有安装gdb的可以使用下面代码安装

sudo yum install -y gdb

一、gdb打开可执行程序

调试之前,我们需要先写出一份代码,我们拿下面的累加的代码举例调试

#include <stdio.h>int AddToEnd(int end)
{int i = 1;int sum = 0;for(;i<end;i++){sum+=i;}return sum;
}int main()
{int end = 100;int result = 0;result = AddToEnd(end);printf("result:%d\n",result);return 0;                                                       
}

程序很简单,我们vim编辑好代码  gcc 编译一下,再使用gdb + 可执行程序进行调试。

发现没有debug模块,这是因为我们gcc编译默认模式为release模式,如果要使用debug模式需要添加 -g 

二、查看代码与操作断点

l(list)查看代码
b(breakpoint)打断点
info b查看断点
d (delete) + 断点编号删除断点
disable禁用断点
enable启动断点

1.l 查看代码

输入 l  可以查看部分代码,gbd会将他认为重要的部分代码给我们做展示。

输入  l + 1  从第一行开始查看代码,一直按回车可以往下查看 

2.b 打断点

打断点的三种方式   

b + 行号 

b + 函数名 

b + 指定文件:行号(多文件下比较方便)

3.info  b  查看断点信息

info b 查看断点信息

4.d   删除断点

d + 断点编号删除断点

5.disable 和 enable 断点的禁用与启用

info b查看断点信息中,Enb这一行为y代表断点是启动状态。

disable + 编号  可以让断点被禁用。 

 

输入 r 运行并不会在被禁用的断点中停止

 

enable + 编号  启动断点,这样  r  运行就会在断点处停止下来。

三、调试 

r(run)启动调试
n(next)逐过程调试
s(step)逐语句调试
display显示变量
undisplay + 编号取消变量显示

1.r  启动调试 

r(run)启动调试,遇到断点处停下来,如果一直没遇到断点,就相当于运行程序。

2. n  逐过程

n (next)为逐过程调试代码,相当于vs2022的F10,遇到函数直接执行到下一行,不进入函数内部。

3. s  逐语句 

s(step)为逐语句调试代码,相当于vs2022的F11,遇到函数会进入函数继续调试,如下。

4.display显示变量

display + 变量 可以显示该变量的值,后续执行时都可以看到该变量。

5.undisplay 取消显示

undisplay + 变量编号 取消显示变量。

四、跳转命令与特殊命令

until跳转到指定行
c跳转到断点处
finish运行到当前函数结尾
bt查看调用堆栈
set var修改变量值

1.until 跳转到指定行

until + 行号   跳转到指定行。

2. c  跳转到断点处

c(continue) 跳转到下一个断点处

3.finish 运行到当前函数结尾

finish 将当前函数运行完停止。

4.bt 查看调用堆栈

bt  查看调用堆栈,这里在函数AddToEnd内部,因此有两个堆栈。

5. set var  修改变量值

set var 变量 = 值   修改变量的值。如下,修改了变量的值,输出结果也不一样了。

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

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

相关文章

e2studio开发磁力计LIS2MDL(1)----轮询获取磁力计数据

e2studio开发磁力计LIS2MDL.1--轮询获取磁力计数据 概述视频教学样品申请源码下载速率新建工程工程模板保存工程路径芯片配置工程模板选择时钟设置UART配置UART属性配置设置e2studio堆栈e2studio的重定向printf设置R_SCI_UART_Open()函数原型回调函数user_uart_callback ()prin…

根据MySql的表名,自动生成实体类,模仿ORM框架

ORM框架可以根据数据库的表自动生成实体类&#xff0c;以及相应CRUD操作 本文是一个自动生成实体类的工具&#xff0c;用于生成Mysql表对应的实体类。 新建Winform窗体应用程序AutoGenerateForm&#xff0c;框架(.net framework 4.5)&#xff0c; 添加对System.Configuration的…

高效构建Java应用:Maven入门和进阶(三)

高效构建Java应用&#xff1a;Maven入门和进阶&#xff08;三&#xff09; 三. Maven的核心功能和构建管理3.1 依赖管理和配置3.2 依赖传递和冲突3.3 依赖导入失败场景和解决方案3.4 扩展构建管理和插件配置 三. Maven的核心功能和构建管理 3.1 依赖管理和配置 Maven 依赖管理…

CentOS安装Docker(超详细)

CentOS安装Docker 1 知识小课堂2 CentOS安装Docker2.1 1.1.卸载&#xff08;可选&#xff09;1.2.安装docker1.3.启动docker1.4.配置镜像加速 3 CentOS安装DockerCompose3.1.下载3.2.修改文件权限3.3.Base自动补全命令&#xff1a; 4 Docker镜像仓库4.1.简化版镜像仓库4.2.带有…

数据分析求职-知识脑图

今天和大家聊聊数据分析求职常见面试题&#xff0c;这是这个系列的第一篇文章&#xff0c;但是我不想开始就直接罗列题目&#xff0c;因为这样的文章实在太多了&#xff0c;同学们的兴趣程度肯定一般。所以&#xff0c;我想先和大家聊聊在准备面试题时候通常遇到的困扰&#xf…

GFP-CERTIFIED®FLUOFORTE®钙离子检测试剂盒

Enzo Life Sciences的GFP-CERTIFIED FLUOFORTE Calcium assay kit提供了一种荧光分析方法&#xff0c;用于检测广泛生物靶标的细胞内钙动员情况。相对于其他商业化的染料&#xff0c;GFP-CERTIFIED FLUOFORTE染料是最亮和最灵敏的荧光钙指示剂。该试剂盒为贴壁和非贴壁细胞系提…

生物信息学中的可重复性研究

科学就其本质而言&#xff0c;是累积渐进的。无论你是使用基于网络的还是基于命令行的工具&#xff0c;在进行研究时都应保证该研究可被其他研究人员重复。这有利于你的工作的累积与进展。在生物信息学领域&#xff0c;这意味着如下内容。 工作流应该有据可查。这可能包括在电脑…

linux 压力测试 AB ApacheBench

ab的简介 ab是apachebench命令的缩写。 ab是apache自带的压力测试工具。ab非常实用&#xff0c;它不仅可以对apache服务器进行网站访问压力测试&#xff0c;也可以对或其它类型的服务器进行压力测试。比如nginx、tomcat、IIS等 ab的原理 ab的原理&#xff1a;ab命令会创建多…

ros架构

ROS&#xff08;Robot Operating System&#xff09;是一个灵活的、分布式的系统架构&#xff0c;用于构建机器人软件。它由一系列工具、库和约定组成&#xff0c;提供了一套通用的功能和通信机制&#xff0c;以支持机器人系统的开发、部署和运行。 ROS架构主要包括以下几个核心…

C++面试宝典第17题:找规律填数

题目 仔细观察下面的数字序列,找到规律,并填写空白处的数字。 (1)1, 2, 4, 7, 11, 16, __ (2)-1, 2, 7, 28, __, 126 (3)6, 10, 18, 32, 57, __ (4)19, 6, 1, 2, 11, __ (5)2, 3, 5, 7, 11, __ (6)1, 8, 9, 4, __, 1/6 (7)1, 2, 3, 7, 16, __, 321 (8)1, 2, …

linux异常情况,排查处理中

登录客户环境后&#xff0c;发现一个奇怪情况如下图&#xff0c;之前也遇到过&#xff0c;直接fuser -ck /backup操作的话&#xff0c;主机将会重启&#xff0c;因数据库运行中&#xff0c;等待停机维护时间&#xff0c;同时也在想办法不重启的情况下解决该问题 [rootdb ~]# f…

git撤销提交到本地的commit

有些时候&#xff0c;当我们提交代码到本地后&#xff0c;突然发现因为某些原因需要撤销提交本地的代码。 就比如我&#xff0c;因为代码写错了分支&#xff0c;已经提交到本地了&#xff0c;而我需要取消&#xff0c;并且还要把代码搞得另外的分支上。 提交前&#xff1a; …

SpiderFlow爬虫平台 前台RCE漏洞复现(CVE-2024-0195)

0x01 产品简介 SpiderFlow是新一代爬虫平台,以图形化方式定义爬虫流程,以流程图的方式定义爬虫,不写代码即可完成爬虫,是一个高度灵活可配置的爬虫平台。 0x02 漏洞概述 SpiderFlow爬虫平台src/main/java/org/spiderflow/controller/FunctionController.java文件的Functi…

【elfboard linux开发板】11. 版本管理和修改设备树流程(点亮LED)

1. 版本管理 1.1 初始化git仓库 git init 生成一个.git 目录 git config --global user.name 用户名 git config --global user.email 邮箱 1.2 查看.gitignore vim .gitignore 1.3 添加删除到缓存区 git status 查看状态 git add 文件名 git rm 文件名 1.4 提交当前记录 …

【AI视野·今日Robot 机器人论文速览 第七十期】Thu, 4 Jan 2024

AI视野今日CS.Robotics 机器人学论文速览 Thu, 4 Jan 2024 Totally 17 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Robotics Papers Many-Objective-Optimized Semi-Automated Robotic Disassembly Sequences Authors Takuya Kiyokawa, Kensuke Harada, Weiwei …

canvas绘制路径之 beginPath() 和 closePath()

查看专栏目录 canvas示例教程100专栏&#xff0c;提供canvas的基础知识&#xff0c;高级动画&#xff0c;相关应用扩展等信息。canvas作为html的一部分&#xff0c;是图像图标地图可视化的一个重要的基础&#xff0c;学好了canvas&#xff0c;在其他的一些应用上将会起到非常重…

《Shader开发实战》-笔记

一、初识游戏图形 1、什么是渲染&#xff1f; 渲染实际上就是创建图像的过程&#xff0c;在渲染过程中创建的图像被称为渲染或者帧&#xff0c;该图像&#xff08;帧&#xff09;以每秒多次在计算机屏幕上进行呈现&#xff0c;即帧率。 负责渲染图像&#xff08;帧&#xff09…

【Redis】非关系型数据库之Redis的主从复制、哨兵和集群高可用

目录 一、主从复制、哨兵、集群的区别 二、主从复制 2.1主从复制的作用 2.2主从复制的原理 2.3主从复制的实操 步骤一&#xff1a;环境准备 步骤二&#xff1a;安装Redis以及配置文件修改 Redis的主从配置文件都一样 步骤四&#xff1a;验证主从复制 三、哨兵 3.1哨兵…

linux(ubuntu)中drontab定时器命令详解

linux&#xff08;ubuntu&#xff09;中drontab定时器命令详解 crontab 是一个用于创建、编辑和管理用户的定时任务的命令&#xff0c;它可以让用户在指定的时间自动执行指定的命令或脚本。 基本语法 -e&#xff1a;编辑用户的 crontab 文件&#xff1b;-l&#xff1a;列出用…

4.MapReduce 序列化

目录 概述序列化序列化反序例化java自带的两种Serializable非Serializable hadoop序例化实践 分片/InputFormat & InputSplit日志 结束 概述 序列化是分布式计算中很重要的一环境&#xff0c;好的序列化方式&#xff0c;可以大大减少分布式计算中&#xff0c;网络传输的数…