炫酷gdb
在VS里面调试很方便对吧?(F5直接调试,F10逐过程调试--不进函数,F11逐语句调试--进函数,F9创建断点),那在Linux中怎么调试呢?
我们需要用到一个工具:gdb
我们知道VS中程序的版本大致有两种模式:debug(开发模式,可被调试)和release(发布模式,不可被调试),为什么会形成这样的差异呢?其实在编译器形成可执行程序的时候,会给可执行程序添加调试信息,gcc编译的时候默认生成的是release版本,这样实现gcc/g++使用debug模式编译(makefile):
processbar-debug:Main.c Processbar.cgcc -o $@ $^ -g.PHONY:clean
clean:rm -f processbar-debug
debug和release版本的不同可以看出:
debug确实比release版本大了很多(11936-8792=3144) debug版本是新增调试信息,debug版本的肯定比release版本的占用空间大(确实如此则证明新增数据)
那为什么要存在这样的差异呢?
其实是因为使用角色的差异,用户是用户,程序员是程序员,用户是程序的使用者,他不需要知道如何调试,只要会用就好了,多放调试信息还浪费空间,但是程序员是开发者,必须要知道调试信息以供调试,否则开发受阻,bug很难de出来(在公司,产品经理==用户,有的时候产品经理就很抽象,假用户威给程序组没事找事,我要diss这类产品经理)
可以这样来查看debug版本下的调试信息:
readelf -S processbar-debug
.rodata:只读区
.text:代码区
.data:数据区
.bss:未初始化全局数据区
debug信息:
readelf -S processbar-debug | grep -i debug
下面简单介绍gdb的使用
使用前先安装下:
yum install -y gdb
所以想要使用就直接gdb+可执行程序名称
gdb processbar-debug
常用命令
quit/q
在进入调试器后想退出可直接quit或者q:
通过分屏可以看出gdb在使用时算一个超绝进程:
list/l
list可用于查询源文件内容,但是是不支持这样直接查询源文件的:
list Processbar.c
从第0行开始查:
list 0
简写效果是一样的:
l 0
一查默认是查十行,在gdb中是会记住上次执行过的命令的,所以只需要按回车就可以查询整个文件了:
也可以这样查:
l Processbar.c:0
还可以查询某个具体函数:
l Processbar.c:ProcBar
在查询某行的时候并不是从它开始,而是显示上下文:
l 15
run/r
直接r相当于VS中的F5,直接执行不调试
break/b
直接执行需要配合断点一起使用,break/b就是打断点
b x //x是行号
断点只能一个一个打
可以指明给某个文件:
b Processbar.c:20
还可以直接给某个函数打断点:
b main
这样打出来的断点是位于函数的第一条语句处的
与在VS中的打断点作比较:
打过断点的地方可以看出有红点,那gdb中怎么查看打过的断点呢?
可以使用这条命令(info break):
info b
i b
Enb:断点的使能:有/没有
delete/d
在打断点的时候通过文件名+行号打,但是删除的时候不可以通过这种方式删除
通过加编号的方式删除断点:
d x //x为号码
断点编号也是线性增长的
disable/enable
在VS中可以实现禁用断点的功能:
可以通过disable来禁用断点:
disable x //x为断点编号
断点有但无用:
1.被禁用
2.为空行
可以通过enable命令来开启禁用的断点:
enable x //x为断点编号
next/n
逐过程:F10
即遇到函数不进入函数调试
step/s
逐语句 :F11
遇到函数进入函数,进行逐语句调试
print/p
在VS中调试是想要看到某些变量的变化过程
在gdb中可以这样来查看变量的变化过程:
p x //x为变量名
地址也可以查哦:
p &i //i为变量名
但是这样查看又太麻烦了,太原始了哇!!!
display/undisplay
display可以常显示变量
undisplay可以把当前常显示的内容去掉
undisplay x //x为变量编号
finish
finish是运行结束所在函数就停止
until
在调试时可能出现的情况还有比如任意跳转到函数的某一行处(中间代码都运行了)
until x //x为行号
info
info b是查看断点的情况,info locals则可用于查看当前栈帧局部变量的值
info locals
i locals
set var
set var可用于修改变量的值
set var i=100 //将i的值变为100
区域化执行
调试工具的核心作用是帮助你找问题,具体的解决需要人为,如果已经定位到问题所在行,那就不需要进行调试了,调试是为了帮助我们避免进行干瞪眼这种费时费力的调试方法诞生的,如果一份代码几万行,从头盯到尾是很费时费力的,我们希望它做的是区域化执行
因为有断点的存在,我们就可以通过断点实现区域化执行,从一个断点运行到下一个断点处,按范围去打断点就可以实现按范围查找,二分打可快速缩小范围
相关文章:

炫酷gdb
在VS里面调试很方便对吧?(F5直接调试,F10逐过程调试--不进函数,F11逐语句调试--进函数,F9创建断点),那在Linux中怎么调试呢? 我们需要用到一个工具:gdb 我们知道VS中程…...

windows 7 10 11快捷键到启动页面
1.快速打开用户启动文件夹 shell:startup 方式2:快速打开系统启动文件夹 shell:Common Startup shell:Common Startup...
[处理器芯片]-6 超标量CPU实现之浮点运算
1 浮点运算单元FPU 超标量CPU中的浮点运算单元是专门处理浮点数运算的关键组件。浮点运算单元的设计涉及多个复杂的子模块和技术,以保证高效、准确地执行浮点数的加减法、乘法、除法、平方根等操作。 1)浮点数术语 浮点数通常采用IEEE 754标准表示&…...

又有人叫嚣:AI取代前端,来给你几张图,看能不能憋死AI。
总有自媒体人,为了些许流量,在大放厥词,说截个图给AI,AI就能输出前端代码,这是啥都敢说,吹牛不上税。 我来给你几张贝格前端工场日常接的大数据项目相关的图,你让AI生成代码,取代前…...

ISCC2024个人挑战赛WP-WEB
(非官方解,以下内容均互联网收集的信息和个人思路,仅供学习参考) 还没想好名字的塔防游戏 GET /world.js HTTP/1.1 Host: 101.200.138.180:17345 Accept: text/html,application/xhtmlxml,application/xml;q0.9,image/avif,i…...

Android 使用 adb 列出设备上所有危险权限
步骤1:确定 Android SDK 位置 打开 Android Studio 的设置,并来到 Languages & Frameworks › Android SDK 处: 这里可以看到 Android SDK 目录的位置: 例如:/Users/admin/Library/Android/sdk。 复制这个路径&am…...
Spring AOP源码分析
#### AOP(面向切面编程)作用及其优势 作用:在程序运行期间,在不修改源码的情况下对方法进行功能增强(通知) 优势:减少重复代码,提高代码复用性,提高代码可维护性…...

[LLM]从GPT-4o原理到下一代人机交互技术
一 定义 GPT-4o作为OpenAI推出的一款多模态大型语言模型,代表了这一交互技术的重要发展方向。 GPT-4o是OpenAI推出的最新旗舰级人工智能模型,它是GPT系列的一个重要升级,其中的"o"代表"Omni",中文意思是“全…...
【Spring】AOP——通知(Advice)
1、通知(Advice) 1.1简介 在AOP中,通知(Advice)是切面(Aspect)中的一部分,用于定义在连接点(Joinpoint)处应该执行的操作。通知类型可以在AOP框架中配置和使…...
python中的一些基础概念
在python中整型数据可以和浮点型数据相加,在python中字符串数据可以进行相加, 在python中整型数据可以和布尔类型进行算术运算。此时True当做1,False当做0但是这样的操作是没有意义的, python中只有字符串类型没有字符类型&…...

8.Redis之hash类型
1.hash类型的基本介绍 哈希表[之前学过的所有数据结构中,最最重要的] 1.日常开发中,出场频率非常高. 2.面试中,非常重要的考点, Redis 自身已经是键值对结构了Redis 自身的键值对就是通过 哈希 的方式来组织的 把 key 这一层组织完成之后, 到了 value 这一层~~ value 的其中…...
Edge浏览器
微软 Edge 是由微软开发的网络浏览器,它是 Windows 10 操作系统的默认浏览器,取代了之前的 Internet Explorer。Edge 浏览器在设计上注重性能、安全性和易用性,同时也提供了许多实用的功能,如内置笔记、阅读视图、集成的语音助手等…...

springboot项目中图片上传之后需要重启工程才能看到图片?
需求背景 最近在做一个用户自定义上传头像的小需求,用户上传头像然后需要立马回显。 需求是很常见的、正当的需求。如果不使用到对象存储这类服务,我们把用户头像的图片文件仅存在本地就可以了。我们在开发的过程中为了工程管理方便通常下意识会将图片…...

打卡信奥刷题(20)用Scratch图形化工具信奥B3756 [信息与未来 2021] 幸运数字
本题的基础是进制转换,关于2进制转换可以参考打卡信奥刷题(19)用Scratch图形化工具信奥B3972 [语言月赛 202405] 二进制 题解 知道了2进制,来实现5进制、7进制、9进制是一样的。 [信息与未来 2021] 幸运数字 题目描述 如果⼀个…...

Stream流模式通信及示例
Stream流模式通信是指在计算机网络中,数据作为连续的字节流传输而不是独立的数据包。它是一种面向连接的通信方式,常见于TCP(传输控制协议)。以下是Stream流模式通信的基本概念和一个简单的示例。 基本概念 面向连接࿱…...

从0开始学统计-t分布
1.t分布是如何被发现的? t分布最早由英国统计学家威廉塞弗顿(William Sealy Gosset)在1908年提出。塞弗顿是爱尔兰的一名酿酒厂的统计学家,他的工作需要对小样本数据进行分析。由于当时样本量较小(通常小于30…...

Git总结超全版
最近想系统的回顾一下Git的使用,如果只想快速的集成git到idea,可以参考另一篇我的博客中的git部分 目录 版本管理工具简介Git安装与配置Git远程仓库配置 Git常用命令为常用命令配置别名(可选)Git忽略文件.gitignore一些概念*本地仓库操作删除仓库内容 *远…...

网络安全之安全协议浅谈
安全协议 安全协议概述安全协议分类IPSecIPSec安全协议IPSec架构IPSec封装模式AH协议ESP协议SET协议SET协议电子交易模型SET协议安全目标认证中心CA 安全协议概述 安全协议是信息交换安全的核心,它在网络不同层次上、针对不同应用,通过对各种密码学技术…...
华为云部署前端项目发生的事
今天刚买了一个云服务,想着部署一下前端项目: 使用的是 docker nginx 部署 部署方法,在以往的文章中有介绍,如有兴趣可以看看docker 部署; 结果发现部署成功之后,竟然无法访问,从命令来看&…...
需求:实现一个可以统计代码的运行时间
需求:有一个做加法计算的函数,要统计执行这个加法函数代码运行了多久 import timedef add(a, b):time.sleep(1)return a bst time.time() add(100, 200) et time.time() print("该函数运行时间为:", et - st) 学了闭包&#x…...
RestClient
什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级ÿ…...

基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...

MMaDA: Multimodal Large Diffusion Language Models
CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战
“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...
Unit 1 深度强化学习简介
Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...

算法:模拟
1.替换所有的问号 1576. 替换所有的问号 - 力扣(LeetCode) 遍历字符串:通过外层循环逐一检查每个字符。遇到 ? 时处理: 内层循环遍历小写字母(a 到 z)。对每个字母检查是否满足: 与…...

uniapp 开发ios, xcode 提交app store connect 和 testflight内测
uniapp 中配置 配置manifest 文档:manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号:4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...

Python 实现 Web 静态服务器(HTTP 协议)
目录 一、在本地启动 HTTP 服务器1. Windows 下安装 node.js1)下载安装包2)配置环境变量3)安装镜像4)node.js 的常用命令 2. 安装 http-server 服务3. 使用 http-server 开启服务1)使用 http-server2)详解 …...

ui框架-文件列表展示
ui框架-文件列表展示 介绍 UI框架的文件列表展示组件,可以展示文件夹,支持列表展示和图标展示模式。组件提供了丰富的功能和可配置选项,适用于文件管理、文件上传等场景。 功能特性 支持列表模式和网格模式的切换展示支持文件和文件夹的层…...