Linux开发工具大全 - 软件包管理器yum | vim编辑器 | gcc/g++编译器 | 自动化构建工具Make/Makefile | gdb调试工具(2)

简介: Linux开发工具大全 - 软件包管理器yum | vim编辑器 | gcc/g++编译器 | 自动化构建工具Make/Makefile | gdb调试工具(2)

Ⅳ.项目自动化构建工具Make/Makefile

1.Make/Makefile的介绍

makefifile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编 译,极大的提高了软件开发的效率。


make是一个命令工具,是一个解释makefifile中指令的命令工具,一般来说,大多数的IDE都有这个命 令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可见,makefifile都成为了一 种在工程方面的编译方法。


make是一条命令,makefifile是一个文件,两个搭配使用,完成项目自动化构建。

2.Make/Makefile的简单使用

(1)Make/Makefile的初始化

首先,我们需要创建一个Makefile文件,命名为Makefile。Makefile的基本格式如下:

1. target: dependencies 
2. command

其中,target表示目标文件,dependencies表示依赖文件,command表示执行的命令(依赖方法)。

对于我们的例子,我们可以创建一个Makefile文件,内容如下:

main: main.c
    gcc -o main main.c

这个Makefile文件表示,我们的目标文件是main,依赖文件是main.c,执行的命令是gcc -o main main.c

接下来,我们在终端中进入程序所在的目录,执行make命令:

make

这时候,Make会自动读取Makefile文件,根据文件中的规则进行编译和构建。如果一切顺利,我们就可以在当前目录下看到一个名为main的可执行文件。

如果我们修改了main.c文件,需要重新编译程序,只需要再次执行make命令即可。

举个栗子:我们写一个测试,用main.c ,pp.h, pp.cpp三个文件实现

编写 makefile,最重要的是理解依赖关系和依赖方法:

  • 依赖关系—— 目标文件:依赖文件
  • 依赖方法—— 源文件形成目标文件需要执行的指令
  • 被.PHONY修饰的对象就是一个伪目标

(伪目标 不依赖任何文件,依赖方法是 rm -f 指令;其中 .PHONY 修饰 clean 表示其是一个伪目标,伪目标总是被执行)

建立一个Makefile文件,注意文件名必须是makefile或Makefile,不能是其他名称,否则make不能识别。

注意:

依赖方法是 gcc 编译,依赖方法的执行指令必须以 [Tab] 键开头,特别注意不能是四个空格

例:[TAB]+g++ pp.cpp -o pp.o

(2)Make/Makefile的使用

接下来,我们在终端中进入程序所在的目录,执行make命令:

删除make指令生成的文件则用刚刚定义的clean

make clean

伪目标总是被执行 的意思就是不管你有没有文件或修改,都会执行定义的clean指令

相对应的就是make指令:只有没有文件或文件被修改才能使用

补充:

可通过 格式:stat+文件名  查看文件的属性信息

Access 指最后一次读取的时间(访问)(比如在终端上用cat、more 、less、grep、 cp 、file 一个文件时都应该更新这个时间,不过它不会每次都更新,因为访问是个非常频繁的操作,每一次我们有意无意的操作,系统都更新它的时间是没必要的)


Modify 指最后一次修改数据的时间(修改)(意思为更改,更改的是内容,“或者“写入)


Change 指最后一次修改元数据的时间(改变)(意思为改变,改变的是状态或属性,比如对一个文件或者目录作mv、chown、chgrp操作)

Ⅴ.gdb调试代码

1.什么是gdb

GDB (GNU Debugger)是一个强大的命令行工具,可以帮助开发人员调试用各种编程语言(包括 C、 C + + 和汇编)编写的程序。它适用于大多数基于 Unix 的系统,包括 Linux 和 macOS。

2.debug和release

(1)Debug称为调试版本,它在源代码的基础上不作任何优化,便于程序员调试程序。

(2)Release称为发布版本,它往往是对程序进行了各种优化,例如减小程序大小和加快运行速度等,以便用户很好地使用。

(3)这两种状态下的代码运行结果可能会不同。

只有debug版本的程序才能调试,gcc默认生成的程序是release版本的,如果想生成debug版本的可执行程序可以在编译语句后面加上-g

若用release版本调试则

需要输入:

g++ fib.cpp -o fib -g

生成debug版本才能使用

3.gdb调试操作

以调试fib为例,简单说明最基本的几个命令,下面是gdb的操作方法。源码如下:

#include<iostream>
#include<queue>
#include<vector>
using namespace std;
int f[100];
int n;
void print(int n)
{
  for(int i=1;i<=n;i++)
    cout<<f[i]<<" ";
} 
int main()
{
  cout<<"hello"<<endl;
  cout<<"I"<<endl;
  cout<<"am"<<endl;
  cout<<"linux"<<endl;
  f[1]=1;
  f[2]=1;
  cin>>n;
  for(int i=3;i<=35;i++)
  {
    f[i]=f[i-1]+f[i-2];
  }
  print(n);
  cout<<n<<endl;
  return 0;
} 

(1)进入调试

格式:gdb 可执行程序文件

输入:gdb fib 进入调试,进入gdb就可以输入指令了

(2)显示源代码

格式:list/l 数字

list 默认展开源代码的前十行,如果还想看到后面的内容可以点击Enter十行十行展开,加入数字表示从第几行显示

(3)断点的添加、删除和信息显示

指令 全称 功能
b breakpoints 打一个断点
info b info break 查看当前断点
d delete breakpoints (n) 删除断点

格式:break+代码行数/b+代码行数    ||   break+代码行数+if+条件/b+代码行数+if+条件

格式:info break/info b

格式:delete+断点编号/del+断点编号

如上图的演示,打断点的时候,b后面加行号,删除断点的时候d后加断点的序号

(4)run运行调试程序与continue继续运行

指令 全称 功能
r run 调试运行
n next 逐过程调试
s step 逐语句调试
c continue 运行到下一个断点处停止

格式:run/r        r 开始运行到断点


格式:continue/c    c 继续运行至断点或者程序结束


格式:next/n        next为gdb的逐语句调试,当遇到函数调用时,不进入函数体,相当于VS的F10


格式:step/s        step为gdb的逐过程调试,当遇到函数调用时,进入函数体,相当于VS的F11

(6)查看某个变量的值

指令 全称 功能
p print 临时查看变量值
display 常显示变量
undisplay 取消变量常显示

格式:print var(var表示任何一个变量或表达式)


在调试过程中,我们需要查看当前某个变量值的时候,可使用 print 命令显示该值,但是只能显示一次下次不会再显示。


格式:display var(var表示任何一个变量或表达式)


使用 display 命令就可以一直显示该值。

undisplay只能删除所有显示值

(7)退出gdb

VS中退出调试可以输入Shift+F5

格式:quit/q

4.其他命令

指令 全称 功能
bt breaktrace 查看函数堆栈
finish 执行完当前函数
until+n 跳转到指定行

until:当你厌倦了在一个循环体内单步跟踪时,这个命令可以运行程序直到退出循环体

until+行号: 运行至某行,不仅仅用来跳出循环

finish: 运行程序,直到当前函数完成返回,并打印函数返回时的堆栈地址和返回值及参数值等信息

call 函数(参数):调用程序中可见的函数,并传递“参数”,如:call gdb_test(55)

disable 断点号n:暂停第n个断点

enable 断点号n:开启第n个断点

clear 行号n:清除第n行的断点


相关实践学习
阿里云图数据库GDB入门与应用
图数据库(Graph Database,简称GDB)是一种支持Property Graph图模型、用于处理高度连接数据查询与存储的实时、可靠的在线数据库服务。它支持Apache TinkerPop Gremlin查询语言,可以帮您快速构建基于高度连接的数据集的应用程序。GDB非常适合社交网络、欺诈检测、推荐引擎、实时图谱、网络/IT运营这类高度互连数据集的场景。 GDB由阿里云自主研发,具备如下优势: 标准图查询语言:支持属性图,高度兼容Gremlin图查询语言。 高度优化的自研引擎:高度优化的自研图计算层和存储层,云盘多副本保障数据超高可靠,支持ACID事务。 服务高可用:支持高可用实例,节点故障迅速转移,保障业务连续性。 易运维:提供备份恢复、自动升级、监控告警、故障切换等丰富的运维功能,大幅降低运维成本。 产品主页:https://www.aliyun.com/product/gdb
相关文章
|
10月前
|
NoSQL Linux 编译器
GDB符号表概念和在Linux下获取符号表的方法
通过掌握这些关于GDB符号表的知识,你可以更好地管理和理解你的程序,希望这些知识可以帮助你更有效地进行调试工作。
441 16
|
算法 安全 Ubuntu
Linux下的软件包管理器有哪些
Linux下的软件包管理器有哪些
737 5
|
9月前
|
NoSQL Linux 开发工具
Linux环境基础开发工具的使用(yum、vim、gcc、g++、gdb、make/Makefile)
本文介绍了yum 包管理工具、Vim 编辑器、gcc/g++ 编译器、gdb 调试器、编译原理及 Makefile 的使用,同时还配备了如何使用,以及图解。旨在帮助读者更好地理解和应用这些工具与技术。
459 0
|
Linux 测试技术 网络安全
Linux系统之安装OneNav个人书签管理器
【10月更文挑战第19天】Linux系统之安装OneNav个人书签管理器
579 6
Linux系统之安装OneNav个人书签管理器
|
6月前
|
安全 关系型数据库 MySQL
CentOS 7 yum 安装 MySQL教程
在CentOS 7上安装MySQL 8,其实流程很清晰。首先通过官方Yum仓库来安装服务,然后启动并设为开机自启。最重要的环节是首次安全设置:需要先从日志里找到临时密码来登录,再修改成你自己的密码,并为远程连接创建用户和授权。最后,也别忘了在服务器防火墙上放行3306端口,这样远程才能连上。
1522 16
|
5月前
|
存储 关系型数据库 MySQL
MySQL介绍和MySQL包安装 -- RHEL系列(Yum资源库安装MySQL)
MySQL是一款开源关系型数据库,高性能、易用、跨平台,支持多种存储引擎,广泛应用于Web开发、企业级应用等领域。本教程介绍其特点、架构及在主流Linux系统中的安装配置方法。
1036 0
MySQL介绍和MySQL包安装 -- RHEL系列(Yum资源库安装MySQL)
|
9月前
|
缓存 Ubuntu 前端开发
yum的安装和使用(包含安装过程中遇到的问题及解决方法)
yum的安装和使用(包含安装过程中遇到的问题及解决方法)
1371 1
yum的安装和使用(包含安装过程中遇到的问题及解决方法)
|
监控 Linux
yum install -y net-snmp-devel 安装不成功 zabbix项目安装,Errors during downloading metadata for repository ‘extras-common’:问题解决方案-优雅草卓伊凡
yum install -y net-snmp-devel 安装不成功 zabbix项目安装,Errors during downloading metadata for repository ‘extras-common’:问题解决方案-优雅草卓伊凡
647 13
yum install -y net-snmp-devel 安装不成功 zabbix项目安装,Errors during downloading metadata for repository ‘extras-common’:问题解决方案-优雅草卓伊凡
|
缓存 Ubuntu Linux
Linux中yum、rpm、apt-get、wget的区别,yum、rpm、apt-get常用命令,CentOS、Ubuntu中安装wget
通过本文,我们详细了解了 `yum`、`rpm`、`apt-get`和 `wget`的区别、常用命令以及在CentOS和Ubuntu中安装 `wget`的方法。`yum`和 `apt-get`是高层次的包管理器,分别用于RPM系和Debian系发行版,能够自动解决依赖问题;而 `rpm`是低层次的包管理工具,适合处理单个包;`wget`则是一个功能强大的下载工具,适用于各种下载任务。在实际使用中,根据系统类型和任务需求选择合适的工具,可以大大提高工作效率和系统管理的便利性。
1523 25
|
关系型数据库 MySQL Linux
Linux 安装 mysql【使用yum源进行安装】
这篇文章介绍了在Linux系统中使用yum源安装MySQL数据库的步骤,包括配置yum源、安装MySQL服务、启动服务以及修改root用户的默认密码。
Linux 安装 mysql【使用yum源进行安装】