第23天Linux下常用工具(二)

目录

第四章 GDB调试工具

4.1gdb的作用

4.2调试代码的流程

4.3gdb的安装

4.4 gdb的使用

第五章 makefile工程管理工具

5.1makefile的作用

5.2makefile的运行

5.3make的安装

5.4makefile的编写方法

5.5makefile的语法

5.6makefile使用示例


第四章 GDB调试工具

4.1gdb的作用

代码调试工具,可以帮助调试代码

替代刚入门时使用一句一printf的调试方法,来找到代码出问题的地方

4.2调试代码的流程

测试:发现问题

定位:通过标志提示或删除功能,定位出问题的大概位置

修改:分析问题,改正问题

测试:验证结果

4.3gdb的安装

sudo apt-get install gdb

在线安装gdb

4.4 gdb的使用

4.4.1准备工作

gdb调试的代码,需要使用gcc的-g参数生成可执行文件的gdb

gcc -g main.c -o maingdb

4.4.2启动gdb

常规启动:

gdb ./maingdb

主函数传参启动:

方法一:

gdb --args ./maingdb 参数1 参数2...

方法二:在开启gdb之后,启动程序之前:

set args 参数1 参数2...

方法三:在开启gdb之后,启动程序之前:

run 参数1 参数2 ...

4.4.3退出gdb

退出gdb指令:q

4.4.4显示代码指令:list 或 l(小写 L)

l n #显示第 n 行附近的代码

例如查看12行附近的代码 

 4.4.5连续运行指令:run或r

代码从头开始执行,一直到结束停止,或者运行到断点位置暂停

遇到主函数传参(例如计算器程序中):r 10 + 20

argv[0]==r

argv[1]==10

argv[2]==+

argv[3]==20

或者:在传参后  

4.4.6设置断点指令:break或b

b n#在第n行设置断点

 4.4.7查看断点指令

info b

这里可以主要关注Enb列和What列

 4.4.8失能断点指令:disable

失能只是不生效了,并没有删除

disable 断点编号

4.4.9使能断点指令:enable

让断点失能后,就有恢复的需要

enable 断点编号

4.4.10删除断点指令clear或delete

clear 断点行号
delete 断点编号

试一下clear: 

试一下delete:

4.4.11 继续运行指令:cont 或 c

4.4.12 打印变量当前的值指令:print

print 变量名 #打印变量的值

4.4.13 单步调试启动指令:start

自动调用上一次运行时传入的参数

4.4.14 单步执行指令: n 或 s

n(next):遇到子函数,不会进入子函数内部,以函数为单位执行

s(step):遇到子函数,会进入子函数内部,以语句为单位执行

常用操作:遇到库函数按 n,不能进入,否则会卡死 遇到普通函数按 s

第五章 makefile工程管理工具

5.1makefile的作用

工程管理工具:名字为makefile的文件

将准备在终端中执行的指令,写入到该文件中(按照规定语法格式写)

5.2makefile的运行

若执行的文件名为makefile:直接在终端键入make,即可自动执行makefile文件中写入的指令

若执行的文件未命名未makefile:终端键入make -f 文件名

5.3make的安装

sudo apt-get install make

在线安装make工具

5.4makefile的编写方法

编写思想:目标和依赖的关系。

首先构思如何通过依赖生成目标,整个过程中一切指令都是为了生成最终目标

5.5makefile的语法

5.5.1注释

#注释

5.5.2 语法一

makefile中不能键入空格,只能键入Tab。否则无效。

目标:依赖命令        #通过依赖生成目标的命令

5.5.3 语法二

目标:命令        #可以直接执行的命令,不一定要得到目标

伪目标:没有依赖的目标

执行伪目标的指令:make 伪目标

5.5.4 变量
 

变量名=值         #定义变量
$(变量名)         #引用变量名对应的值

vim 底行模式:字符串自主选择替换--- :%s/gcc/$(cc)/gc

5.5.5 特殊变量

$@ 代表目标

$^ 代表所有依赖

$< 代表所有依赖中的第一个

% makefile 中的通配符

经过变量替换后,代码可以变成,除了计算机,大家都一眼看不懂的样子。

5.6makefile使用示例

这里我依然使用计算器的模块程序

首先实现静态库封装

inc=./inc
src=./src
out=./output
libpath=./lib
libname=static    #以上都是变量替换main:main.c $(libpath)/lib$(libname).agcc $< -l$(libname) -L$(libpath) -o $@ -I$(inc)@echo 编译完成./main 1 + 1
$(libpath)/lib$(libname).a: $(out)/add.o $(out)/jian.oar -rc $@ $^@echo 静态库制作完成
$(out)/%.o:$(src)/%.cgcc -c $< -o $@ -I$(inc)
clean:rm $(out)/*.o main $(libpath)/lib$(libname).a

其次,实现动态库封装

main:main.c ./lib/libmove.sosudo mv ./lib/libmove.so /usr/libgcc main.c -lmove -I./inc -o main./main 1 + 1
./lib/libmove.so:./output/add.o ./output/jian.ogcc -shared -fpic -o $@ $^
./output/%.o:./src/%.cgcc -c $< -o $@ -I./inc
clean:rm ./lib/libmove.so ./output/*.o main

整个工程管理有点倒置执行的意思,但总共执行那编译四步、编译两步,理清执行顺序就可以。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

ubuntu22.04与ubuntu24.10使用Remmina远程桌面共享

1. ubuntu22.04启用远程桌面共享 点击Remote Desktop,按下图设置 成功启用 2.ubuntu24.10远程桌面启用 选择远程桌面选项 启用远程桌面共享与远程控制 启用远程登陆

基于51单片机的高压锅控制系统proteus仿真

地址&#xff1a; https://pan.baidu.com/s/16BuxmKYUprTGbkEj_BWGvQ 提取码&#xff1a;1234 仿真图&#xff1a; 芯片/模块的特点&#xff1a; AT89C52/AT89C51简介&#xff1a; AT89C52/AT89C51是一款经典的8位单片机&#xff0c;是意法半导体&#xff08;STMicroelectro…

D3的竞品有哪些,D3的优势,D3和echarts的对比

D3 的竞品 ECharts: 简介: ECharts 是由百度公司开发的一款开源的 JavaScript 图表库&#xff0c;提供了丰富的图表类型和高度定制化的配置选项。特点: 易于使用&#xff0c;文档详尽&#xff0c;社区活跃&#xff0c;支持多种图表类型&#xff08;如折线图、柱状图、饼图、散点…

2024年11月13日

1.创业法律指南 留置权和其他三个权 定金和订金 一般保证和连带保证 1.案例 物权编之担保法律制度案例一 冯系养鸡专业户&#xff0c;为改建鸡会和引进良种需资金20万元。冯向陈借款10万元&#xff0c;以自己的一套价值10万元的音响设备抵押&#xff0c;双方立有抵押字据&a…

从电动汽车到车载充电器:LM317LBDR2G 线性稳压器在汽车中的多场景应用

附上LM317系列选型&#xff1a; LM317BD2TG-TO-263 LM317BTG-TO-220 LM317BD2TR4G-TO-263 LM317D2TG-TO-263 LM317D2TR4G-TO-263 LM317TG-TO-220 LM317LBDR2G-SOP-8 LM317LDR2G-SOP-8 LM317MABDTG-TO-252 LM317MABDTRKG-TO-252 LM317MA…

健康之路三度冲击港交所,数字健康医疗平台IPO前景引关注

健康之路股份有限公司&#xff08;HealthyWay Inc.&#xff09;再次向港交所递交招股书&#xff0c;拟在主板上市。此前两次尝试未果&#xff0c;但公司用户基础坚实&#xff0c;业务覆盖广泛&#xff0c;包括健康医疗服务和企业服务及数字营销服务。股东阵容强大&#xff0c;营…

SpringCloud篇(配置中心 - Nacos)

目录 一、Nacos 配置中心 1. 统一配置管理 1.1. 在nacos中添加配置文件 1.2. 从微服务拉取配置 1.2.1. 引入nacos-config依赖 1.2.2. 添加bootstrap.yaml 1.2.3. 读取nacos配置 1.2.4. 页面访问 2. 配置热更新&#xff1a;两种 2.1. 方式一 2.2. 方式二 3. 配置共享…

vue2和vue3的区别详解

vue2 VS vue3 对比vue2vue3配置脚手架cmd命令行可视化方式创建脚⼿架组件通信props、$emit、provide、$arrts、EventBus等props、$emit、provide、inject、arrts等数据监听watch,computedwatch,watchEffect,computed双向绑定Object.definePropertyProxyAPI⽣命周期四个阶段befo…

高中数学:概率-相关运算性质

文章目录 一、概率定义二、运算性质三、事件相互独立四、频率与概率五、练习 一、概率定义 二、运算性质 基本性质 互斥事件的性质 对立事件性质 包含事件的性质 有交集但不包含的事件性质 三、事件相互独立 注意&#xff1a; 四、频率与概率 五、练习

我要学kali-linux之shell脚本编程1

声明&#xff01; 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人以及泷羽sec团队无关&a…

概率密度与功率谱密度的理解与仿真

引言 概率密度&#xff08;Probability Density&#xff09;是统计学中十分重要的概念之一&#xff0c;其应用广泛&#xff1b;功率谱密度&#xff08;power spectral density, PSD&#xff09;则在电子电气行业用得比较多。 在基于雷达的目标检测中&#xff1a;概率密度和功率…

数据中台解决方案

文件是关于数据中台解决方案的详细介绍&#xff0c;内容涵盖了数据中台的定义、建设方案、实施步骤、以及在数字化转型中的作用。以下是对文件内容的分析和总结&#xff1a; 1. 数字化转型背景 国家政策支持&#xff1a;提到了《中华人民共和国国民经济和社会发展第十四个五年…

Spring Task详细讲解

✨Spring Task简介 Spring Task 是 Spring 提供的轻量级定时任务工具&#xff0c;也就意味着不需要再添加第三方依赖了&#xff0c;相比其他第三方类库更加方便易用。可以按照约定的时间自动执行某个代码逻辑。 使用场景&#xff1a; 信用卡每月还款提醒银行贷款每月还款提醒…

RabbitMQ运维

1. 单机多节点 1.1 搭建RabbitMQ ①安装RabbitMQ 略 ②确认RabbitMQ运⾏没问题 #查看RabbitMQ状态 rabbitmqctl status 节点名称: 端口号: 25672:Erlang分布式节点通信的默认端⼝, Erlang是RabbitMQ的底层通信协议.15672: Web管理界⾯的默认端⼝, 通过这个端⼝可以访问R…

AI 1.0公司的节节败退

商汤科技又裁员了&#xff0c;并不算行业新鲜事&#xff0c;新鲜的是&#xff0c;这次裁员发生在积极拥抱大模型之后。 成立于2014年的商汤科技&#xff0c;是2014—2015年的AI 1.0创业潮中拿到第一桶金的领头羊&#xff0c;并率先登陆资本市场&#xff0c;成为AI第一股。某种程…

图片识别为什么要将彩色图像灰度化?

为何在处理图像识别任务时&#xff0c;常需将彩色图像转换为灰度图像&#xff1f;在深入探讨此问题之前&#xff0c;我们首先需要明确“灰度化”的定义。 1、灰度化 灰度化处理&#xff0c;简而言之&#xff0c;是指将彩色图像转换成灰度图像的过程。 在电子显示设备&#xff…

NLP论文速读(微软出品)|使用GPT-4进行指令微调(Instruction Tuning with GPT-4)

论文速读|Instruction Tuning with GPT-4 论文信息&#xff1a; 简介&#xff1a; 这篇论文试图解决的问题是如何通过指令调优&#xff08;instruction-tuning&#xff09;提升大型语言模型&#xff08;LLMs&#xff09;在执行新任务时的零样本&#xff08;zero-shot&#xff0…

【金猿案例展】科技日报——大数据科技资讯服务平台

‍ 拓尔思数据要素案例 该数据要素项目案例由拓尔思投递并参与“数据猿年度金猿策划活动——2024数据要素产业年度创新服务企业榜单/奖项”评选。 大数据产业创新服务媒体 ——聚焦数据 改变商业 媒体行业企事业单位在数据要素领域得天独厚&#xff0c;日积月累的新闻报道、媒…

1、使用vscode+eide+stm32cubeMx开发stm32

步骤1&#xff1a;在vscode中安装如下的插件 步骤2&#xff1a;点击Embedded IDE&#xff0c;点击“新建项目”-----空项目-----Cortex-M项目。 步骤3&#xff1a;输入项目名&#xff0c;回车后会要制定保存路径&#xff0c;此时就是一个已项目名命名的文件夹。 步骤4&#xff…

〔 MySQL 〕数据类型

目录 1.数据类型分类 2 数值类型 2.1 tinyint类型 2.2 bit类型 2.3 小数类型 2.3.1 float 2.3.2 decimal 3 字符串类型 3.1 char 3.2 varchar 3.3 char和varchar比较 4 日期和时间类型 5 enum和set mysql表中建立属性列&#xff1a; 列名称&#xff0c;类型在后 n…