调试器 gdb/cgdb 的使用

一.

touch mycode.c

vim mycode.c

cgdb 下载

Ubuntu:sudo apt-get install -y cgdb

Centos:   sudo yum install -y cgdb

Linux 下我们编译好的代码无法直接调试

g++/gcc 默认的工作模式是release模式

程序要调试,必须是debug模式,编译时要加-g选项   gdb 携带调试信息的exe

-g 选项,让最后形成的可执行程序,添加调试信息    ---  debug 模式

cgdb后面不是跟源文件,跟的是可执行程序,我们要调试的是可执行程序

开始 --> cgdb 可执行程序

上面是代码界面,下面是debug界面

我们软件一旦启动默认跑到结束

可以打断点运行到断点位置

怎么打断点?

-->

1)  b 文件名:行号

2)b 文件名:main

3)   忽略这些直接打断点

      b 行号

查看断点和删除断点

info b 查看当前所有断点的信息

d n   删除编号为n的断点

gdb 不退出,断点变化依次增加

在第18行设置一个

n /next 单步执行,不进入函数内部

r一下

s/step 单步执行,进入函数内部,gdb 会自动记录最新的一条输入指令

bt 查看当前执行栈的各级函数调用及参数

finish   执行到当前函数返回,然后停止

p 变量  打印指定变量的值

disable 和 enable

disable  禁用断点

enable  启用断点

退出 --> 我们输入quit 调试命令 或者 ctrl + d

l 文件名:行号 ---> 列出指定文件的源代码

l/list  显示源代码从上次位置开始,每次列出10行

就可以看到我们的debug信息

不行的话,使用这个


二.调试的本质

我们调试的本质是什么?

1.找到问题

1.1 断点的本质-->是把代码进行块级别划分,以块为单位进行快速定位区域

我们修改一下文件内容

设置断点

c/continue 从当前位置开始连续执行程序

until 行号,执行到指定行号

1.2 局部区域内快速执行

1.3 finish 确认问题是否在函数内


三.现在我们设置一个问题,来找到这个问题

display 变量名  , 跟踪显示指定变量的值(每次停止时)

undisplay 编号  , 取消对指定编号的变量的跟踪显示

再n

发现问题


infor/i  locals 查看当前栈帧的局部变量值


四.补充:

watch

执行时监视一个表达式(变量)的值,如果监视的表达式在程序在程序运行期间的值发生变化,gdb会暂停程序的运行,并通知使用者

如果有一些变量不应该修改,但是我们怀疑他修改导致出现了问题,我们可以watch它,如果变化了,就会通知我们

删除的时候也是和删除断点一样的

set var  确定问题原因

修改了

条件断点

给已经存在的断点新增条件

五.cgdb 分屏操作 

Esc 进入代码屏

i 回到gdb屏

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

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

相关文章

通过DataWorks实现MaxCompute跨项目迁移

本文为您介绍如何配置不同MaxCompute项目并实现数据迁移。 背景信息 本文使用的被迁移的原始项目为教程《简单用户画像分析(MaxCompute版)》中的WorkShop2023项目,您需要再创建一个迁移目标项目,用于存放原始项目的表、资源、配置…

【Linux】安装cuda

一、安装nvidia驱动 # 添加nvidia驱动ppa库 sudo add-apt-repository ppa:graphics-drivers/ppa sudo apt update# 查找推荐版本 sudo ubuntu-drivers devices# 安装推荐版本 sudo apt install nvidia-driver-560# 检验nvidia驱动是否安装 nvidia-smi 二、安装cudatoolkit&…

Vue.js 学习总结(14)—— Vue3 为什么推荐使用 ref 而不是 reactive

前言 ref 和 reactive 是 Vue3 中实现响应式数据的核心 API。ref 用于包装基本数据类型,而 reactive 用于处理对象和数组。尽管 reactive 似乎更适合处理对象,但 Vue3 官方文档更推荐使用 ref。 我的想法,ref就是比reactive好用,…

ctfshow-Misc入门(1-16)

misc1 查看图片得到flag misc2 1、打开文本,发现以“塒NG”开头 3、修改文件格式为png格式 4、查看图片,得到flag *遇到的问题:无法直接修改后缀名 *解决方法:需要点击文件夹,然后点击查看,将文件拓…

自动驾驶概念

1.线控底盘 由五大系统构成:线控转向、线控制动系统、线控换挡、线控油门踏板以及线控悬架。 2.自动驾驶分级 L1级别,也被称作驾驶支援阶段。在这一阶段,车辆系统能够根据驾驶环境来辅助驾驶者进行方向盘操作或减速操作中的一项&#xff0c…

【C】错误的变量定义导致sprintf()‌输出错误

问题描述 刚刚写一个用AT指令透传相关的函数,需要用到sprintf()‌拼接字符串。 结果发现sprintf()‌拼接出来的内容是错误的,简化后的代码如下: const char AT_CIPSEND_FIX_LENGTH_HEADER[11] "ATCIPSEND"; // 错误的&#xff0…

【Pytest+Yaml+Allure】实现接口自动化测试框架

一、框架思想 requestsyamlpytestallure实现接口自动化框架。结合数据驱动和分层思想,将代码与数据分离,易维护,易上手。使用yaml编写编写测试用例,利用requests库发送请求,使用pytest管理用例,allure生成…

内网渗透横向移动1

1.信息收集 (1)判断域控 shell net time /domain shell ping OWA2010CN-God.god.org (2)主机探测 浏览探测->网络探测 主机列表显示: (3)域用户收集: shell net user /domain…

C++初阶——类和对象(下)

目录 1、再探构造函数——初始化列表 2、类型转换 3、static成员 4、友元 5、内部类 6、匿名对象 7、对象拷贝时编译器的优化(了解) 1、再探构造函数——初始化列表 1. 构造函数初始化除了使用函数体内赋值,还有一种方式——初始化列表, 初始化列…

数据指标与标签在数据分析中的关系与应用

导读:分享数据指标体系的文章很多,但讲数据标签的文章很少。实际上,标签和指标一样,是数据分析的左膀右臂,两者同样重要。实际上,很多人分析不深入,就是因为缺少对标签的应用。今天系统的讲解下…

Exploring Prompt Engineering: A Systematic Review with SWOT Analysis

文章目录 题目摘要简介方法论背景相关工作评估结论 题目 探索快速工程:基于 SWOT 分析的系统评价 论文地址: https://arxiv.org/abs/2410.12843 摘要 在本文中,我们对大型语言模型 (LLM) 领域的提示工程技术进行了全面的 SWOT 分析。我们强…

Android 常用命令和工具解析之内存相关

目录 1 基本概念 1.1 PSS & RSS & USS & VSS 1.1.1 PSS 1.1.2 RSS 1.2 Dirty & Clean & SwapPss 1.2.1 Private Dirty 1.2.2 Private Clean 1.2.3 SwapPss Dirty 1.3 Swap & buffers & cache 1.3.1 Swap 1.3.2 buffers 1.3.3 cache 2…

使用Go 语言连接并操作 MySQL 数据库

新建项目,我这里使用的vscode: 1.新建项目初始化: 手动创建工程文件夹go安装目录->src->projectName 在项目下创建 main.go文件: 在vscode中点击文件->打开文件夹,选择刚刚新建的文件夹。打开后&#xff0…

YOLOv11融合[NeurlS2022]递归门控卷积gnconv模块及相关改进思路

YOLOv11v10v8使用教程: YOLOv11入门到入土使用教程 YOLOv11改进汇总贴:YOLOv11及自研模型更新汇总 《HorNet: Efficient High-Order Spatial Interactions with Recursive Gated Convolutions》 一、 模块介绍 论文链接:https://arxiv.org…

从零开始-VitePress 构建个人博客上传GitHub自动构建访问

从零开始-VitePress 构建个人博客上传GitHub自动构建访问 序言 VitePress 官网:VitePress 中文版 1. 什么是 VitePress VitePress 是一个静态站点生成器 (SSG),专为构建快速、以内容为中心的站点而设计。简而言之,VitePress 获取用 Markdown…

使用Notepad++工具去除重复行

使用Notepad工具去除重复行 参考链接:https://blog.csdn.net/londa/article/details/108981396 一 、使用正则表达式 1、对文本进行排序,让重复行排在一起 2、使用正则表达式替换(注意)^(.*?)$\s?^(?.*^\1$) 在替换时选择正…

RabbitMQ和RocketMQ相关面试题

RabbitMQ和RocketMQ面试题 RabbitMQ1.RabbitMQ各部分角色2.如何确保RabbitMQ消息的可靠性?3.什么样的消息会成为死信?4.死信交换机的使用场景是什么?5.TTL6.延迟队列7.消息堆积问题8.MQ集群 RocketMQ1.RocketMQ各部分角色2.RocketMQ如何保证高…

【机器学习chp5】线性回归

推荐文章1,三种角度详细分析了L1,L2正则化的本质。 【王木头 L1、L2正则化】三个角度理解L1、L2正则化的本质-CSDN博客 推荐文章2,其中有各种梯度下降的优化算法分析。 【王木头梯度下降法优化】随机梯度下降、牛顿法、动量法、Nesterov、…

【AI系统】GPU 架构回顾(从2018年-2024年)

Turing 架构 2018 年 Turing 图灵架构发布,采用 TSMC 12 nm 工艺,总共 18.6 亿个晶体管。在 PC 游戏、专业图形应用程序和深度学习推理方面,效率和性能都取得了重大进步。相比上一代 Volta 架构主要更新了 Tensor Core(专门为执行…

Windows11深度学习环境配置

CUDA、CUDNN 一、安装另一个版本的CUDA 下载.exe文件,网址打不开自己开热点就能解决:CUDA Toolkit 11.2 Downloads | NVIDIA Developer 若遇到“You already have a newer version of the NVIDIA Frameview SDK installed” 1.把电脑已经存在的FrameVi…