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.hqwc.cn/news/123746.html

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

相关文章

Jmeter+jenkins接口性能测试平台实践整理

最近两周在研究jmeter+Jenkin的性能测试平台测试dubbo接口,分别尝试使用maven,ant和Shell进行构建,jmeter相关设置略。 一、Jmeterjenkins+Shell+tomcat 安装Jenkins,JDK,tomcat,并设置环境变量&#xff0…

【VR】【unity】如何在VR中实现远程投屏功能?

【背景】 目前主流的VD应用,用于娱乐很棒,但是用于工作还是无法效率地操作键鼠。用虚拟键盘工作则显然是不现实的。为了让自己的头显能够起到小面积代替多显示屏的作用,自己动手开发投屏VR应用。 【思路】 先实现C#的投屏应用。研究如何将C#投屏应用用Unity 3D项目转写。…

WebSocket的那些事(6- RabbitMQ STOMP目的地详解)

目录 一、目的地类型二、Exchange类型目的地三、Queue类型目的地四、AMQ Queue类型目的地五、Topic类型目的地 一、目的地类型 在上节 WebSocket的那些事(5-Spring STOMP支持之连接外部消息代理)中我们已经简单介绍了各种目的地类型,如下图&…

Redis持久化(RDB/AOF)

"在哪里走散,你都会 找 到 我。" 认识持久化 我们在接触Mysql事务的时候,一定了解过Mysql事务的四个特性: "原子性(A)一致性(C)隔离性(I)持久性(D)" 而其中持久性其实与持久化是一回事,所谓持久与不持久&#x…

python实现http/https拦截

python实现http拦截 前言:为什么要使用http拦截一、技术调研二、技术选择三、使用方法前言:为什么要使用http拦截 大多数爬虫玩家会直接选择API请求数据,但是有的网站需要解决扫码登录、Cookie校验、数字签名等,这种方法实现时间长,难度高。需求里面不需要高并发,有没有…

Docker 容器监控 - Weave Scope

Author:rab 目录 前言一、环境二、部署三、监控3.1 容器监控 - 单 Host3.2 容器监控 - 多 Host 总结 前言 Docker 容器的监控方式有很多,如 cAdvisor、Prometheus 等。今天我们来看看其另一种监控方式 —— Weave Scope,此监控方法似乎用的人…

【C语言】循环结构程序设计 (详细讲解)

前言:前面介绍了程序中常常用到的顺序结构和选择结构,但是只有这两种结构是不够的,还有用到循环结构(或者称为重复结构)。因为在日常生活中或是在程序所处理的问题中常常遇到需要重复处理的问题。 【卫卫卫的代码仓库】 【选择结构】 【专栏链…

蜂蜜配送销售商城小程序的作用是什么

蜂蜜是农产品中重要的一个类目,其受众之广市场需求量大,但由于非人人必需品,因此传统线下门店经营也面临着痛点,线上入驻平台也有很多限制难以打造自有品牌,无法管理销售商品及会员、营销等,缺少自营渠道&a…

列表的增删改查和遍历

任务概念 什么是任务 任务是一个参数为指针,无法返回的函数,函数体为死循环不能返回任务的实现过程 每个任务是独立的,需要为任务分别分配栈称为任务栈,通常是预定义的全局数组,也可以是动态分配的一段内存空间&#…

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

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

云原生Kubernetes:K8S安全机制

目录 一、理论 1.K8S安全机制 2.Authentication认证 3.Authorization授权 4.Admission Control准入控制 5.User访问案例 6.ServiceAccount访问案例 二、实验 1.Admission Control准入控制 2.User访问案例 3.ServiceAccount访问案例 三、问题 1.生成资源报错 2.镜…

分布式应用程序协调服务 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工作流…