Linux 下如何调试代码

debug 和 release

在这里插入图片描述

在Linux下的默认模式是什么?

在这里插入图片描述
release模式
那你怎么证明他就是release版本?
我们知道如果一个程序可以被调试,那么它一定是debug版本,如果它是release版本,它是没法被调试的,所以说我们可以来调试一下

在Linux下,我们要遇到的调试工具是gdb
使用gdb --v 命令来查看我们是否安装了gdb这个工具
在这里插入图片描述
如何调试程序?
直接:gdb + 可执行程序
比如,我们生成了一个可执行程序叫mycode
你就直接:gdb mycode
就会进入这样一个调试窗口:
在这里插入图片描述
如果是release 是无法被调试的:
在这里插入图片描述

使用:quit 退出gdb
在这里插入图片描述

如何在debug模式下调试程序,我们知道Linux 默认的模式是 release的,我们首先要把 release 模式变成 debug
在这里插入图片描述
gcc 操作后加上-g 就表示以debug模式编译该程序
这样之后我们在来操作:
在这里插入图片描述
使用:list 查看我们写的代码
在这里插入图片描述
使用qquit退出gdb

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

开始使用gdb

打开gdb: gdb 可执行程序 :比如:gdb mycode
退出gdb: qquit

调试:

  1. 显示我们所写的代码: l 指令,l 就是 list 的简写,从0行开始给代码排序显示l 0:
    在这里插入图片描述
    这里并没有显示完全,我们按下 回车 就行了

在这里插入图片描述

2. 开始调试,类似vs中的f5gdb中是run 命令,可以简写为r

在这里插入图片描述

3. 打断点的操作

比如你想给第19 行打上断点,就执行:b 19
在这里插入图片描述
如何查看我们所打的断点的信息?
info b
在这里插入图片描述
我们还可以这样打断点:b mycode.c:20
在这里插入图片描述
查看一下:
在这里插入图片描述
我们还可以给函数打上断点:b mycode.c:main 这就表示直接给main函数所在的位置打上断点
在这里插入图片描述
如何删除我们所打上的断点?
我们根据断点编号来删除断点,之前当我们执行:info b 查看断点信息时会出现以下信息:
在这里插入图片描述
在这里插入图片描述
有了断点编号,我们要删除断点就直接:d + 断点编号
比如要删除第3个断点,就直接:d 3
在这里插入图片描述

如何开启断点和 禁用 断点:
接下来要说的这个呢,兄弟们可能就没怎么见过了啊,呃,在vs下,比如说我在某一行按f9打个断点。然后呢我们可以单击右键,就比如说选中这个断点单击右键,然后我们可以禁用这个断点,然后可以起启用这个断点,那么禁用断点。和启用断点也是一个断点的功能,那么它和删除断点是有区别的。
禁用断点呢,其实就是这个断点啊,它还在这儿,只不过暂时不起效果。但是删除断点的话,那么就代表这个断点就没了,打一个断点,然后把这个断点呢直接禁用掉,意思这个断点还在这儿,但这个断点不起作用。
怎样查看断点是开启还是关闭的呢?
使用info b 命令,我们可以看到:
在这里插入图片描述

如何关闭断点(注意不是删除)
disable + 断点表号
在这里插入图片描述
如何启动断点
enable + 断点编号
在这里插入图片描述

逐语句和逐过程

逐过程就是不进入函数 逐语句就是要进入函数
我们先来逐过程:next 简写为 n
逐语句:step 简写为:s

我们知道vs中有监视窗口,可以方便我们查看变量的值,那么gdb中我们该如何查看变量的值呢?

p 指令。如果你想要查看变量i的值就:p i 想要查看变量sum 的值就 p sum
p &i 就可以看到 i 的地址,p &sum 就可看到sum的地址。
在这里插入图片描述
如何一直让我们想观察的变量显示在屏幕上,不被我我们后面的指令顶上去?
display 指令,如果你想一直在屏幕上显示i 你就:display i
如何取消一直显示呢?
undisplay 指令,比如:undisplay + 编号 这个编号不是断点的编号而是display指令后的那个编号,在这里插入图片描述

好了,如果我们不想让语句一条一条的执行,而是直接到达我们想要的那个地方,并且不打断点,那该怎么办。
until 指令,比如我们想要程序直接到第13行,就直接until 13

我们也可以单独的跑完某个函数
我们首先进入要走函数之后,直接输入:finish 就可以跑完这个函数

我们如何重当前断点直接执行到下一个断点?
直接按 c, 就行了

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

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

相关文章

FPGA project : TFT_LCD

实验目标: 驱动TFT_LCD显示十色彩条。 重点掌握的知识: 1,液晶显示器,简称LCD(Liquid Crystal Display),相对于上一代CRT显示器(阴极射线管显示器),LCD显示器具有功耗低、体积小、承载的信息量大及不伤眼…

王道考研操作系统——I/O管理

I/O设备的基本概念 键盘:输入设备(把设备准备好的数据读入计算机当中); 显示器:输出设备(把计算机中准备好的数据写出到设备上); 移动硬盘:既是输入又是输出 中断驱动…

数据挖掘(2)数据预处理

一、数据预处理 1.1概述 数据预处理的重要性 杂乱性:如命名规则。重复性:同一客观事再不完整性:噪声数据:数据中存在错误或异常的现象。 数据预处理的常见方法 数据清洗:去掉数据中的噪声,纠正不一致。数…

HTML的学习 Day02(列表、表格、表单)

文章目录 一、列表列表主要分为以下三种类型:1. 无序列表(Unordered List):2. 有序列表(Ordered List):将有序列表的数字改为字母或自定义内容li.../li 列表项标签中value属性,制定列…

OpenCV实现视频的追踪(meanshift、Camshift)

目录 1,meanshift 1.1 算法流程 1.2 算法实现 1.3 代码实现 1.4 结果展示 1,meanshift 1.1 算法流程 1.2 算法实现 1.3 代码实现 import numpy as np import cv2 as cv# 读取视频 cap cv.VideoCapture(video.mp4)# 检查视频是否成功打开 if n…

分布式应用程序协调服务 ZooKeeper 详解

目录 1、ZooKeeper简介 2、ZooKeeper的使用场景 3、ZooKeeper设计目的 4、ZooKeeper数据模型 5、ZooKeeper几个重要概念 5.1、ZooKeeper Session 5.2、ZooKeeper Watch 5.3、Consistency Guarantees 6、ZooKeeper的工作原理 6.1、Leader Election 6.2、Leader工作流…

NPDP产品经理知识(产品创新管理)

复习文化,团队与领导力 产品创新管理: 如何树立愿景: 如何实现产品战略 计划 实施产品开发: 商业化,营销计划,推广活动 管理产品生命周期: 新式走向市场的流程:

【Docker】docker拉取镜像错误 missing signature key

问题 当我使用docker拉取一个特定的镜像时,提示错误: 错误 missing signature key 但是拉取其他镜像又可以访问,,,,于是,我怀疑是否是docker版本问题。 docker --version结果确实&#xff0…

操作系统原理-习题汇总

临近毕业,整理一下过去各科习题及资料等,以下为操作系统原理的习题汇总,若需要查找题目,推荐CtrlF或commandF进行全篇快捷查找。 操作系统原理 作业第一次作业选择题简答题 第二次作业选择题简答题 第三次作业选择题简答题 第四次…

ctfshow—1024系列练习

1024 柏拉图 有点像rce远程执行,有四个按钮,分别对应四份php文件,开始搞一下。一开始,先要试探出 文件上传到哪里? 怎么读取上传的文件? 第一步:试探上传文件位置 直接用burp抓包,…

凉鞋的 Godot 笔记 105. 第一个通识:编辑-测试 循环

105. 第一个通识:编辑-测试 循环 在这一篇,我们简单聊聊此教程中所涉及的一个非常重要的概念:循环。 我们在做任何事情都离不开某种循环,比如每天的 24 小时循环,一日三餐循环,清醒-睡觉循环。 在学习一…

通过java向jar写入新文件

文章目录 原始需求分析实施步骤引入依赖核心编码运行效果 原始需求 有网友提问: 我想在程序中动态地向同一个jar包中添加文件,比如,我的可执行jar包是test.jar,我要在它运行时生成一些xml文件并将这些文件添加到test.jar中,请问如何实现&…

C#制做一个 winform下的表情选择窗口

能力有限,别人可能都是通过其他方式实现的,我这里简单粗暴一些,直接通过点击按钮后弹出个新窗体来实现。 1、先在form1上增加一个toolstrip控件,再增加个toolstripbutton按钮,用来点击后弹出新窗体,如图&a…

centos 部署nginx 并配置https

centos版本:centos 7.8 (最好不要用8,8的很多用法和7相差很大) 一.安装nginx 1。下载Nginx安装包:首先,访问Nginx的官方网站(https://nginx.org/)或您选择的镜像站点,找…

阿里云ACP知识点(三)

1、弹性伸缩不仅提供了在业务需求高峰或低谷时自动调节ECS实例数量的能力,而且提供了ECS实例上自动部署应用的能力。弹性伸缩的伸缩配置支持多种特性,例如______,帮助您高效、灵活地自定义ECS实例配置,满足业务需求。 标签、密钥对、 实例RAM…

AWS-Lambda之导入自定义包-pip包

参考文档: https://repost.aws/zh-Hans/knowledge-center/lambda-import-module-error-python https://blog.csdn.net/fxtxz2/article/details/112035627 简单来说,以 " alibabacloud_dyvmsapi20170525 " 包为例 ## 创建临时目录 mkdir /tmp cd ./tmp …

机器学习(监督学习)笔记

笔记内容 代码部分 # 实验2-1 # 批梯度下降 import pandas as pd import numpy as np import random as rd import matplotlib.pyplot as plt # load dataset df pd.read_csv(temperature_dataset.csv) data np.array(df) y0 np.array([i[0] for i in data]) # 第一列作为…

QT、C++实现地图导航系统(mapSystem)

文章目录 地图导航系统项目应用背景技术栈选择数据处理算法实现界面实现源码展示成果展示源码下载 (免费) 地图导航系统 项目应用背景 电子地图导航系统的主要目的是为用户提供精确、实时的导航和位置信息,以帮助他们在城市或地区内轻松找到…

固定式工业RFID读写器有哪些特点?如何选型?

工业读写器可分为便携式读写器和固定式读写器,固定式读写器主要是将读写器固定在某一位置钟,常常应用在工位、生产、进入库等场景中。但是很多人并不了解固定式读写器都有哪些特点,具体应该怎么选型,下面我们就一起来了解一下。 固…

C语言数组和指针笔试题(五)(一定要看)

这里写目录标题 指针运算笔试题解析题目1解析结果 题目2解析结果 题目3解析结果 题目4解析结果 题目5解析结果 题目6解析结果 题目7解析结果 题目8解析结果 感谢各位大佬对我的支持,如果我的文章对你有用,欢迎点击以下链接 🐒🐒🐒个人主页 &a…