Linux GCC,GDB,Shell脚本的简单使用

news2024/11/19 15:35:12

这里写目录标题

  • GCC命令
  • GDB命令
  • Shell脚本

GCC命令

GCC(GNU Compiler Collection,GNU编译器套件)是由GNU开发的编程语言译器

编译一个简单的.c程序:

四步分开写:

gcc -E -o hello.i hello.c	// 预处理
gcc -S -o hello.s hello.i	// 编译
gcc -c -o hello.o hello.s	// 汇编
gcc -o hello hello.o		// 链接

分成两步:

gcc -c -o hello.o hello.c  // 先编译(做了前三步,但不链接)
gcc -o hello hello.o       // 再链接

一步到位:(这个hello就是可执行文件,存放程序结果)

gcc -o hello hello.c

一下编译多个源文件

gcc -o hello a.c b.c c.c
gcc -o a.o a.c 
gcc -o b.o b.c 
gcc -o c.o c.c 
gcc -o hello a.o b.o c.o   

gcc -o hello hello.c这种一步到位的方法会将文本文件直接转化成可执行文件,这样的做法会比将源代码分别经过预处理,编译,汇编,链接这四个过程的效率要更高,

这是因为在一次编译过程中,gcc -o output file.c会自动执行预处理、编译、汇编和链接这四个步骤,它能够根据需要自动调用相应的工具。这样可以避免中间文件的生成和保存,减少了磁盘I/O的开销,并减少了编译过程中的文件传输时间。

然而,如果你在多次编译中需要重复使用预处理文件、汇编文件或目标文件,或者需要手动进行编译的不同阶段的调试或优化,那么将源代码分别经过预处理、编译、汇编和链接四个步骤可能会更加灵活和方便。

总的来说,对于一次性的编译过程而言,直接使用gcc -o output file.c的方式更高效。而对于多次编译、调试或优化的情况,分阶段进行编译可能更为灵活。在实际使用中,可以根据具体需求和优化目标选择合适的编译方式。

如果说需要编译C++程序的话,就把gcc改成g++即可

g++ -o hello hello.c

GDB命令

GDB是一个功能强大的调试工具,用于调试C、C++等程序
接下来讲一个简单的调试例子,并给出常用的命令:

1.先用GCC命令生成调试信息
在g++/gcc 后面加上 -g表示生成调试信息

g++ -g -o hello hello.cpp

如果不生成的话,会弹出错误
“NO symbol table is loaded”
意味着在您加载的可执行文件中没有找到符号表。符号表包含了程序中变量、函数和其他符号的信息,它是调试器进行源代码和机器码之间映射的关键。

2.使用gdb命令进行调试
gdb的常见命令:
1.使用gdb

gdb myprogram(文件名)

2.设置断点

break <location>

location可以是一个函数,或者是一个源文件加行号的形式,例如:

break main
break hello.cpp:5

3.运行程序

run

4.继续运行程序(在一个断点停下之后)

continue

遇到下一个断点会停下

5.单步执行(不进入函数)

next

6.单步执行(进入函数)

step

7.打印变量的值

print 变量名

8.查看堆栈

backtrace

9.监视变量

watch 变量名

监视变量的值,当该变量的值发生变化时,GDB会中断程序的执行。

10.修改变量的值

set 变量名 = 值

常用命令

接下来给出一个实例:

1.写一个待测试程序hello.cpp,如图
在这里插入图片描述
2.用g++ 命令生成可执行文件
在这里插入图片描述
3.使用gdb命令开始调试
在这里插入图片描述
4.设置断点
在这里插入图片描述
如图,我在程序第6行设置了一个断点,第六行的代码此时为
printf(“%d”,sum);也就是说程序运行到这行之前就停止了

4.使用run命令运行程序
在这里插入图片描述
如图,程序运行到第六行发现有一个断点,停止了运行,并给出了提示.

5.用print打印变量
在这里插入图片描述
会发现x和y的值是正常的,但是因为sum=x+y这条命令没执行,所以sum的值是没初始化的

6.单步执行程序

在这里插入图片描述
我们单步执行下一行语句 sum=x+y之后,再用print打印 sum的值
sum的值变成了15

7.继续运行程序
在这里插入图片描述
因为后续没有断点了,所以程序会直接运行到结束,并输出结果.

Shell脚本

在这里插入图片描述
这些都只是Linux操作系统的一些基本操作
接下来我们说一下如何编写一个简单的shell脚本

1.创建一个.sh后缀的文件

vim create_project.sh

写入:

#!/bin/bash

echo "hello shell"
mkdir my_project
cd my_project
cd ..
mkdir build
touch main.cpp

其中
#!/bin/bash
是告诉操作系统使用Bash解释器来解释和执行后续的Shell脚本代码。Bash(Bourne Again SHell)是一种流行的Unix/Linux Shell,它提供了强大的命令行解释器和脚本编程功能。

使用#!/bin/bash作为shebang行的好处是,它确保脚本在执行时将使用Bash解释器,而不依赖于默认的Shell解释器。这样,您可以确保脚本中使用的特定Bash语法和功能在执行时可用。

除了#!/bin/bash,您还可以使用其他Shell解释器作为shebang行的一部分,例如#!/bin/sh表示使用标准Shell解释器,或#!/bin/zsh表示使用Zsh解释器。根据您的需求和系统配置,选择适合的解释器。

2.设置权限为可运行

chmod +x create_project.sh

3.运行脚本

./create_project.sh

或者

bash create_project.sh

运行之后,系统就会依次执行shell脚本中的命令.

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

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

相关文章

49、基于51单片机无刷电机调速系统设计(程序+原理图+PCB图+英文文献+参考论文+开题报告+元器件清单等)

摘 要 由于电机的发展&#xff0c;电动机由之前的带有刷子变换为无刷子直流电动机&#xff0c;其内部结构是电子换向器&#xff0c;而不是传统的机械式换向器&#xff0c;电动机的组成为永磁材料制造的转子和带有线圈绕组的定子组成。 所以本论文思路在全面分析无刷直流电机…

Tuleap ,一个用于软件项目管理的平台

Eclipse 基金会使用 Tuleap 取代了 Bugzilla,Tuleap 是一个独特的开源项目管理工具&#xff0c;目前发展势头很好&#xff0c;现在&#xff0c;每个月它会出一个大版本。它还被列在2015 年五大开源项目管理工具和 2016 年十一个名列前茅项目管理工具中。 Manuel Vacelet 是开发…

【MySQL】一文带你了解MySQL的基础知识

&#x1f3ac; 博客主页&#xff1a;博主链接 &#x1f3a5; 本文由 M malloc 原创&#xff0c;首发于 CSDN&#x1f649; &#x1f384; 学习专栏推荐&#xff1a;LeetCode刷题集&#xff01; &#x1f3c5; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指…

【Docker】docker部署springboot+vue+mysql+nginx前后端分离项目【实战篇】

文章目录 1、docker 安装jdk2、docker 安装mysql通过Docker命令进入Mysql容器内部初始化数据sqlDbx连接查看 3、docker build构建后端镜像修改配置数据库JDBC链接IP为虚拟机服务器IPmaven clean package打包后端jar并上传到服务器编写Dockfilebuild 构建查看构建的后端镜像app …

51单片机读取DS18B20温度传感器

1.首先我们知道DS18B20是单总线协议&#xff0c;只有一根数据线。所以Data数据线即使发送端又是接收端&#xff0c;同时DS18B20内部接了弱上拉电阻&#xff08;如图一所示&#xff09;&#xff0c;数据线默认为高电平。有了这些概念&#xff0c;我们就能进行下一步。 图一&…

1738_创建自己的simulink模块库

全部学习汇总&#xff1a; GreyZhang/g_matlab: MATLAB once used to be my daily tool. After many years when I go back and read my old learning notes I felt maybe I still need it in the future. So, start this repo to keep some of my old learning notes servral …

随着网络犯罪策略的转变,暗网威胁瞄准能源行业

根据 Searchlight Cyber 的一份报告&#xff0c;能源行业越来越多地通过暗网上的活动成为恶意行为者和威胁组织的目标。 该报告详细介绍了威胁行为者出售全球能源组织初始访问权的众多实例。 其中包括美国、加拿大、英国、法国、意大利和印度尼西亚的流行暗网论坛&#xff08…

使用AIGC工具巧用Linux系统

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

【Python爬虫开发基础③】Python基础(文件操作方法汇总)

友情提示&#xff1a;由于本专栏的文章偏向于爬虫&#xff0c;所以对于python的介绍不可能面面俱到&#xff0c;在这里只讲重点。 如果大家觉得有没讲到的地方&#xff0c;欢迎补充~ 往期推荐&#xff1a; 【Python爬虫开发基础①】Python基础&#xff08;变量及其命名规范&…

黑马Redis视频教程高级篇(三:最佳实践)

目录 一、Redis键值设计 1.1、优雅的key结构 1.2、拒绝BigKey 1.2.1、BigKey的危害 1.2.2、如何发现BigKey 1.2.3、如何删除BigKey 1.3、恰当的数据类型 例1&#xff1a;比如存储一个User对象&#xff0c;我们有三种存储方式&#xff1a; 例2&#xff1a;假如有hash类…

5.部署LVS-DR群集

文章目录 部署LVS-DR群集LVS-DR数据包流向分析LVS-DR中的ARP问题问题一问题二 LVS-DR部署调度器配置节点服务器配置NFS服务器配置 ipvsadm 部署LVS-DR群集 LVS-DR数据包流向分析 为方便进行原理分析&#xff0c;将Client与群集机器放在同一网络中&#xff0c;数据包流经的路线…

2000-2019年280多个地级市就业人数数据(全市)/城市就业数据

2000-2019年280多个地级市就业人数数据&#xff08;全市&#xff09; 1、时间范围&#xff1a;2000-2019年 2、范围&#xff1a;包括280多个地级市 3、来源&#xff1a;城市NJ 4、统计口径&#xff1a;全市 5、单位&#xff1a;万人 6、缺失情况&#xff1a;与城市年鉴缺失情况…

python学习笔记20230611

python语言的特点 python是脚本语言&#xff0c; 采用解释方式执行。 解释是将源代码逐条转换成目标代码同时逐条运行目标代码的过程。执行解释的计算机程序就是解释器。 解释执行方式是逐条运行用户编写的代码&#xff0c;执行性能略低&#xff0c;但他支持跨硬件或操作系统…

HNU计算机图形学-作业二

HNU计算机图形学-作业二 作业二&#xff1a;纹理和照明前言介绍实施详细信息任务1&#xff1a;加载复杂对象任务2&#xff1a;纹理映射和照明任务3&#xff1a;互动活动和动画额外任务&#xff1a;增强场景的视觉效果&#xff08;最高20%&#xff09; 最终实现效果 作业二&…

【Protobuf速成指南】oneof关键字的使用

文章目录 2.3 oneof 字段一、基本认识二、 3.2 oneof相关函数三、Contact2.3 改写 2.3 oneof 字段 本系列文章将通过对通讯录项目的不断完善&#xff0c;带大家由浅入深的学习Protobuf的使用。这是Contacts的2.3版本&#xff0c;在这篇文章中将带大家学习Protobuf的 oneof 语关…

LVS负载均衡集群-NAT模式

目录 前言一、企业群集应用概述1. 群集的含义1.1 群集的特点1.2 扩展服务器的方式 2. 群集的类型2.1 负载均衡群集&#xff08;Load Balance Cluster&#xff09;2.2 高可用群集&#xff08;High Availability Cluster&#xff09;2.3 高性能运算群集&#xff08;High Performa…

STL——stack容器、queue容器、list容器

初识STL **stack容器****stack容器——基本概念****stack容器——常用接口** **queue容器****queue容器——基本概念****queue容器——常用接口** **list容器****list容器基本概念****list容器——构造函数****list容器——赋值和交换****List容器——大小操作****list容器——…

碳排放预测模型 | Python实现基于机器回归分析的碳排放预测模型——数据可视化和探索

文章目录 效果一览文章概述研究内容环境准备源码设计学习总结参考资料效果一览 文章概述 碳排放预测模型 | Python实现基于机器回归分析的碳排放预测模型——数据可视化和探索 目标是测试所选特征对分析的重要性,检测异常值的存在并准备数据以供进一步分析。 </

PCA主成分分析

PCA降维算法 目前图像特征的提取主要有两种方法&#xff1a;传统图像特征提取方法 和 深度学习方法。 传统的特征提取方法&#xff1a;基于图像本身的特征进行提取&#xff08;PCA&#xff09;&#xff1b;深度学习方法&#xff1a;基于样本自动训练出区分图像的特征分类器&a…

【算法与数据结构】19、LeetCode删除链表的倒数第 N 个结点

文章目录 一、题目二、双指针法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、双指针法 思路分析&#xff1a;这道题使用双指针一次遍历就能删除目标节点。快慢指针同一位置出发&#xff08;虚节点&#x…