Linux--学习记录(3)
-
G++重要编译参数
- -g(GDB调试)
- -g选项告诉gcc产生能被GNU调试器GDB使用的调试信息,以调试程序
- 编译带调试信息的可执行文件
- g++ -g hello.c -o hello
- 编译过程:
- -E(预处理)
- g++ -E hello.c -o hello.i
- -S(编译)
- g++ -S hello.i -o hello.s
- -c(汇编)
- g++ -c hello.s -o hello.o
- 链接
- g++ hello.o -o hello
- -E(预处理)
- -O[n]
- 优化源代码
- -O0:表示不做优化
- -O1:为默认优化
- -O2:除了完成-O1的优化之外,还进行一些额外的优化工作,如指令调整等(一般使用这个即可满足要求)
- g++ -O2 hello.c -o hello
- time
- time ./hello
- 可以带引该可执行文件的执行时间
- time ./hello
- -l(指定库文件、-L(指定库文件路径)
- 在/lib、/usr/lib及/usr/local/lib里的库直接-l参数就能链接
- 例:链接glog库
- g++ -lglog hello.c -o hello
- 例:链接glog库
- 如果库文件没放在以上三个目录里,需要使用-L参数指定库文件所在目录
- 例
- g++ -L/home/wangxianyue/hellolibfolder -lhello hello.c -o hello
- 例
- 在/lib、/usr/lib及/usr/local/lib里的库直接-l参数就能链接
- -I(指定头文件搜索目录)
- /usr/include一般是不用指定的,gcc知道去;但如果头文件不在这里,就需要使用-I参数进行指定了。
- 例:头文件放在当前目录中
- g++ -ImyInclude hello.c -o hello
- 例:头文件放在当前目录中
- /usr/include一般是不用指定的,gcc知道去;但如果头文件不在这里,就需要使用-I参数进行指定了。
- -Wall(打印警告信息)
- g++ -Wall hello.c -o hello
- -w(关闭打印信息)
- g++ -w hello.c -o hello
- -std=c++11(设置编译标准)
- g++ -std=c++11 hello.cpp -o hello
- -o(指定输出文件名)
- g++ hello.c -o hello
- -D(定义宏)
- g++ -DDEBUG hello.c -o hello
- -g(GDB调试)
-
g++命令行编译(命令实战)
- -I命令(直接编译)
- 生成库文件并编译
- 1. 生成静态库(编译时链接)
- 步骤1:先进入src目录下
- 步骤2:先生成.o的汇编文件
- 步骤3:生成静态库libSwap.a
- 步骤4:回到上级目录
- 步骤5:链接,生成可执行文件static_main(-l会自动省略lib及.a,故直接输入-lSwap即可)
- 步骤6:运行static_main即可(./static_main)
- 步骤1:先进入src目录下
- 生成动态库(运行时链接)
- 步骤1:进入src目录下
- 步骤2:生成动态库libSwap.so
- 步骤3:回到上级目录
- 步骤4:链接,生成可执行文件dynamic_main
- 步骤5:运行
- 步骤1:进入src目录下
-
常用调试命令参数
- GDB调试器:
- 用来调试C/C++程序的功能强大的调试器,是linxu系统开发C/C++最常用的调试工具
- 程序员可以使用GDB来跟踪程序中的错误,从而减少程序员的工作量
- linxu开发C/C++一定要熟悉GDB
- VScode是通过调用GDB调试器来实现C/C++的调试工作的
- Windows系统中,常用的集成开发环境(IDE),如VS,VC等,他们内部已经嵌套了相应的调试器
- GDB主要功能:
- 设置断点(断点可以使条件表达式)
- 使程序在指定的代码上暂停执行,便于观察
- 单步执行程序,便于调试
- 查看程序中变量值的变化
- 动态改变程序的执行环境
- 分析崩溃程序产生的core文件
- 常用调试命令参数
- 调试开始:执行gdb exefilename,进入gdb调试工具,其中exefilename为要调试的可执行文件名
- 参数
- help(h):查看命令帮助,具体命令查询在gdb中输入help + 命令
- run(r):重新开始运行文件
- start:单步执行,运行程序,停在第一行执行语句
- list(l):查看源代码,(list n:从第n行开始查看代码;list 函数名:查看具体函数)
- set:设置变量的值
- next(n):单步调试(逐过程,函数直接执行)
- step(s):单步调试(逐语句,跳入自定义函数内部执行)
- backtrace(bt):查看函数的调用的栈帧和层级关系
- frame(f):切换函数的栈帧
- info(i):查看函数内部局部变量的数值
- finish:结束当前函数,返回到函数调用点
- continue(c):继续执行(跳到下一个断点)
- print(p):打印值及地址
- quit(q):退出调试
- break+num(b):在第num行设置断点
- info breakpoints:查看当前设置的所有断点
- delete breakpoints num(d):删除第num个断点
- display:追踪查看具体变量值
- undisplay:取消追踪观察变量
- watch:被设置观察点的变量发生修改时,打印显示
- i watch:显示观察点
- enable breakpoints:启用断点
- disable breakpoints:禁用断点
- x:查看内存
- run argv[1] argv[2]:调试时命令行传参
- set follow-fork-mode child:#Makefile项目管理,选择跟踪父子进程(fork())
- Tips:
- 编译程序时,需要加上-g参数,之后才能进行gdb调试,gcc -g hello.c -o hello
- 回车键,重复上一命令
- GDB调试器:
- 1. 生成静态库(编译时链接)
- -I命令(直接编译)
相关文章:

Linux--学习记录(3)
G重要编译参数 -g(GDB调试) -g选项告诉gcc产生能被GNU调试器GDB使用的调试信息,以调试程序编译带调试信息的可执行文件g -g hello.c -o hello编译过程: -E(预处理) g -E hello.c -o hello.i-S(编…...

自然语言处理阅读第一弹
Transformer架构 encoder和decoder区别 Embeddings from Language Model (ELMO) 一种基于上下文的预训练模型,用于生成具有语境的词向量。原理讲解ELMO中的几个问题 Bidirectional Encoder Representations from Transformers (BERT) BERT就是原生transformer中的Encoder两…...

Spring Boot+Mybatis设置sql日志打印
在全局配置文件添加以下内容:logging.level.com.demo.mapperdebug,com.demo.mapper:src下的mapper路径,debug:设置日志打印级别为debug,亦可设置为:ERROR、WARN、INFO application.properties …...

步进电机电流设置的3种方法
本文介绍步进电机电流设置的3种方法。 步进电机电流设置包括运行电流(IRun)和保持电流(IHold)2种。电机运行时需要有较大电流以保证有足够的力矩使物体运动,而停止的时候,为了减少电机发热及降低功耗&…...

uniapp-使用返回的base64转换成图片
在实际开发的时候 需要后端实时的给我返回二维码 他给我返回的是加密后的base64字符串 我需要利用这个base64转换到canvas画布上展示 或者以图片的形式展示在页面内 在canvas画布上展示 使用官方的uni.getFileSystemManager().writeFile()方法可将base64码转成的二维码显示在…...

有机面条市场分析:到2026 年的复合年增长率为 5.4%
近年来,有机面条因其健康益处和可持续性而广受欢迎。由于消费者对健康和天然食品的需求不断增加,预计 全球有机面条市场将继续以显着速度增长。特别是中国市场,由于健康意识的提高以及对有机和天然产品的兴趣 增加,有机面条消费量…...

广州设计周落幕|值得被歌颂的奥力斯特岩板
12月11日,一年一度的广州设计周,为期四天的展会在广州保利世贸博览馆、广州国际采购中心和南丰国际会展中心三大展馆已落下帷幕。依旧熙攘,依旧热烈,远道而来的专家领导、媒体嘉宾、展商代表、外国友人、设计爱好者,风…...

WTN6系列语音芯片:PWM与DAC音频输出在PCB设计中的优势
随着科技的飞速发展,语音芯片在电子产品中的应用越来越广泛。其中,唯创知音的WTN6系列语音芯片凭借其卓越的性能和多样的功能,受到了市场的热烈欢迎。特别是其支持PWM和DAC两种音频输出方式的特点,使得工程师在PCB设计时能够更加灵…...

设计模式 原型模式 与 Spring 原型模式源码解析(包含Bean的创建过程)
原型模式 原型模式(Prototype模式)是指:用原型实例指定创建对象的种类,并且通过拷贝这些原型,创建新的对象。 原型模式是一种创建型设计模式,允许一个对象再创建另外一个可定制的对象,无需知道如何创建的细节。 工作原…...

Docker介绍,Docker安装
docker镜像仓库官网 一、Docker的基本概念 1.Docker的三大核心组件 docker 镜像 --------docker images docker 仓库---------docker registeries docker 容器---------docker containers 2.Docker 镜像 Docker镜像是运行docker容器时的只读模板,每一个镜像由一…...

CLIP 对比学习 源码理解快速学习
最快的学习方法,理清思路,找视频讲解,看源码逻辑: CLIP 源码讲解 唐宇 输入: 图像-文本成对配对的数据 训练模型的过程(自己理解): 怎么做的?:利用数据内部…...

6.鸿蒙app_hap_DevEco如何真机调试模式_app安装在手机中
真机调试 手机》设置》关于手机》HarmonyOS版本》软件版本,连续单击10次启动开发者模式 然后:设置》系统和更新》开发人员选项》打开USB调试功能。 电脑USB连接手机,手机USB连接类型,传文件(不要选择仅充电…...

【JVM从入门到实战】(八)垃圾回收(1)
内存泄漏:指的是不再使用的对象在系统中未被回收,内存泄漏的积累可能会导致内存溢出 什么是垃圾回收 Java中为了简化对象的释放,引入了自动的垃圾回收(Garbage Collection简称GC)机制。通过垃 圾回收器来对不再使用的…...

LeeCode前端算法基础100题(12)-删除有序数组中的重复项
一、问题详情: 给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。 考虑 nums 的唯一元素的数量为 k ,你需要做以下事情确保你的题…...

MATLAB图解傅里叶变换(初学者也可以理解)
1、概述 相信很多人对于傅里叶变换可能觉得比较复杂和有点难懂,其实不难,它只是一种积分变换。 傅里叶变换,表示能将满足一定条件的某个函数表示成三角函数(正弦和/或余弦函数)或者它们的积分的线性组合。也就是说&qu…...

uni-app 用于开发H5项目展示饼图,使用ucharts 饼图示例
先下载ucharts H5示例源码: uCharts: 高性能跨平台图表库,支持H5、APP、小程序(微信小程序、支付宝小程序、钉钉小程序、百度小程序、头条小程序、QQ小程序、快手小程序、360小程序)、Vue、Taro等更多支持canvas的框架平台&#…...

回归预测 | MATLAB实现SABO-LSTM基于减法平均优化器优化长短期记忆神经网络的多输入单输出数据回归预测模型 (多指标,多图)
回归预测 | MATLAB实现SABO-LSTM基于减法平均优化器优化长短期记忆神经网络的多输入单输出数据回归预测模型 (多指标,多图) 目录 回归预测 | MATLAB实现SABO-LSTM基于减法平均优化器优化长短期记忆神经网络的多输入单输出数据回归预测模型 &a…...

JDK bug:ciObjectFactory::create_new_metadata
文章目录 1、问题2.详细日志3.JDK:bug最终bug链接: 京东遇到过类似bug各位大佬如果有更详细的解答可以留言。 1、问题 Problematic frame: V [libjvm.so0x438067] ciObjectFactory::create_new_metadata(Metadata*)0x327 关键字还是ciObjectFactory::cr…...

Flink系列之:Over聚合
Flink系列之:Over聚合 一、Over聚合二、ORDER BY三、PARTITION BY四、范围(RANGE)定义五、RANGE 间隔六、ROW 间隔 适用于流、批 一、Over聚合 OVER 聚合通过排序后的范围数据为每行输入计算出聚合值。和 GROUP BY 聚合不同, OV…...

Java开发工具积累(符合阿里巴巴手册规范)
文章目录 一、命名规约二、代码格式三、集合篇1. 栈、队列、双端队列2. List的升序倒序3. Map的升序降序4. 二维数组排序5. 集合之间的转换6. Map键值对遍历7. 重写equal与hashCode8. ArrayList的subList9. keySet()/values()/ent…...

SiLM5350MDBCA-DG车规级隔离驱动芯片,我们能为汽车智能提供什么?
SiLM5350MDBCA-DG是一款适用于IGBT、MOSFET的单通道 隔离门极驱动器,具有10A拉电流和10A灌电流驱动能 力。提供内部钳位功能,可单独控制 上升时间和下降时间。 在 SOP8 封 装 中 具 有 3000VRMS 隔 离 耐 压 ( 符 合 UL1577)。 与…...

【开题报告】基于SpringBoot的企业财务管理系统的设计与实现
1.研究背景 随着全球经济的发展和市场竞争的加剧,企业财务管理变得越来越重要。企业需要一个高效、精确、安全的财务管理系统来管理企业的财务事务,提供准确的财务数据支持决策制定。传统的手工财务管理方式已经无法满足企业的需求,因此&…...

【C盘清理】Jetbrains全家桶(PyCharm、Clion……)更改 IDE 特定文件(配置、缓存、插件、日志等)存储位置
文章目录 一、官网说明二、更改 IDE 目录的位置1. 转到“帮助”|“编辑自定义属性”2. 各文件位置3. 以PyCharm系统目录为例4. 修改idea.properties 三、清理旧的 IDE 目录 一、官网说明 IDE 使用的目录官网说明 二、更改 IDE 目录的位置 默认情况下,PyCharm 将每…...

nginx部署vue项目
nginx部署vue 解决nginx中vue项目刷新报404问题解决nginx转发后端服务隐藏部分url访问url路径/prod-api/api经过nginx反向代理后,到达后端服务的实际url地址为/api。 解决nginx中vue项目刷新报404问题 location / { …...

Relocations for this machine are not implemented,IDA版本过低导致生成汇编代码失败
目录 1、问题描述 2、安卓app发生崩溃,需要查看汇编代码上下文去辅助分析 3、使用IDA打开.so动态库文件,提示Relocations for this machine are not implemented 4、IDA版本较老,不支持ARM64的指令集,使用7.0版本就可以了 5、…...

[ CTF ]【天格】战队WriteUp-第七届“强网杯”全国安全挑战赛
第七届“强网杯”全国安全挑战赛 2023.12.16~2023.12.17 文章目录 【Misc】Pyjail ! Its myFILTER !!!easyfuzz谍影重重2.0签到Pyjail ! Its myRevenge !!!server_8F6C72124774022B.py 问卷调查 【Reverse】ezre 【Web】happygame 【强网先锋】石头剪刀布TrieSpeedUpezreez_fmt…...

Android13音频录制适配
Android13音频录制适配 前言: 之前写过一篇音频录制的文章,当时是在Android10以下的手机可以成功录制和播放,但是Android10及以上手机提示创建文件失败,最近做过Android13的适配,索性一起把之前的录音也适配了&#…...

【Python】—— 如果使用matplotlib做数据可视化
matplotlib做数据可视化 相关知识掌握matplotlib的基本使用方法1. 折线图2. 散点图3. 柱状图4. 饼图5. 直方图6. 等高线图7. 图形定制 掌握数据处理的基本方法1. 数据筛选2. 缺失值处理3. 异常值处理 理解数据可视化的原则和方法1. 选择合适的图表类型2. 避免数据混淆3. 突出重…...

【MyBatis-Plus】多数据源分页配置(低版本暂时就支持一种(可选),高版本多支持)
【转载】一、Mybatis Plus 3.4 版本之后分页插件的变化 1、地址 Mybatis Plus 3.4版本之后分页插件的变化 2、内容 1、MybatisPlusInterceptor 从 Mybatis Plus 3.4.0 版本开始,不再使用旧版本的 PaginationInterceptor,而是使用 MybatisPlusInterce…...

Linux 特殊符号
目录 1. # 注释 2. ;命令分隔符 3. .. 上级目录 4. . 当前目录 5. " " 换行,解析变量 6. 换行,不解析变量 7. \ 和 / 8. !历史命令调用,取反 9. * 通配符 10. $ 调用变量 11. | 管道 12. || …...