Linux环境及工具(yum/vim/gcc/g++/gdb/make/Makefile)(3)

简介: Linux环境及工具(yum/vim/gcc/g++/gdb/make/Makefile)(3)

四、Linux调试器-gdb


1、背景及概念


相关概念:

程序的发布方式有debug模式和release模式


Linux gcc/g++编译链接出来的可执行程序默认是release模式


gdb 是 Linux 里的调试器,想调试必须在源代码生成可执行程序的时候加上 -g 选项


为什么要有debug和release:

在程序开发时程序员遇到bug需要调试,而调试需要在程序里内置调试信息


而对于发布面向的是用户,用户不需要调试信息


示图:


2、调试命令

示例:


#include<stdio.h>
int Sum(int num)
{
   int i=1,sum=0;
   for(;i<=num;i++)
   {
      sum+=i;
   }
   return sum;
}
int main()
{
    int num=100;                                                                                                                   int sum=Sum(num);
    printf("%d\n",sum);
    return 0;
}


使用


gdb +文件名:进入调试
ctrl + d 或 quit/q :退出调试


  • 展示:


list/l 行号:显示binFile源代码,接着上次的位置往下列,每次列10行
list/l 函数名:列出某个函数的源代码
info break/ info b :查看断点信息
print/p:打印表达式的值,通过表达式可以修改变量的值或者调用函数
display 变量名:跟踪查看一个变量,每次停下来都显示它的值
undisplay:取消对先前设置的那些变量的跟踪
info(i) locals:查看当前栈帧局部变量的值
breaktrace(或bt):查看各级函数调用及参数  


  • 修改:


set var:修改变量的值


  • 断点:


break/b 行号:在某一行设置断点
break 函数名:在某个函数开头设置断点
delete breakpoints/d:删除所有断点
delete breakpoints n/d n:删除序号为n的断点
disable breakpoints/disable:禁用断点
enable breakpoints/enable:启用断点



注:禁用断点的作用是在使用断点后调试无误用来记录已经调试过


  • 执行:


run/r:从开始连续而非单步执行程序(从新运行,有断点运行到第一个断点,否则运行完毕)
next/n:单条执行
continue/c:从当前位置开始连续而非单步执行程序(执行到下一个断点处)
step/s:进入函数调用
finish:执行到当前函数返回,然后挺下来等待命令
until X行号:执行跳至X行


五、Linux项目自动化构建工具-make/Makefile


1、背景及概念


一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作


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


make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令


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


2、使用及原理

确定目标文件和源文件的依赖关系,有了依赖关系还需要依赖方法(用来确定具体如何执行生成目标文件)


示例:


注意:

依赖方法快捷写法示例:gcc -o $^ $@


@ : 对 应 的 是 目 标 文 件 ; @:对应的是目标文件;@:对应的是目标文件;^:表示依赖文件列表


执行过程/原理:

在默认的方式下只输入make命令,则会在当前目录下找名字叫“Makefile”或“makefile”的文件


如果找到,它会找文件中的第一个目标文件(target),在上面的例子中,它会找到“test”这个文件,并把这个文件作为最终的目标文件


如果test文件不存在,或是test所依赖的后面的依赖文件的文件修改时间要比这个文件新,那么它就会执行后面所定义的命令来生成test这个文件


如果test所依赖的文件不存在,那么make会在当前文件中找目标为以依赖文件的依赖性,如果找到则再根据那一个规则生成依赖文件


这就是整个make的依赖性,make会一层又一层地去找文件的依赖关系,直到最终编译出第一个目标文件


在找寻的过程中,如果出现错误,比如最后被依赖的文件找不到,那么make就会直接退出,并报错,而对于所定义的命令的错误,或是编译不成功,make根本不理


make只管文件的依赖性,即如果在找了依赖关系之后,之后如果还写有目标文件都不会进行生成


项目清理:

像clean这种,没有被第一个目标文件直接或间接关联,那么它后面所定义的命令将不会被自动执行,需要显示make执行,即命令“make clean”以此来清除所有的目标文件,以便重编译


对于clean这种目标文件,我们将它设置为伪目标(用 .PHONY 修饰),伪目标的特性是总是可以被执行(可以多次执行)


示图:


相关实践学习
阿里云图数据库GDB入门与应用
图数据库(Graph Database,简称GDB)是一种支持Property Graph图模型、用于处理高度连接数据查询与存储的实时、可靠的在线数据库服务。它支持Apache TinkerPop Gremlin查询语言,可以帮您快速构建基于高度连接的数据集的应用程序。GDB非常适合社交网络、欺诈检测、推荐引擎、实时图谱、网络/IT运营这类高度互连数据集的场景。 GDB由阿里云自主研发,具备如下优势: 标准图查询语言:支持属性图,高度兼容Gremlin图查询语言。 高度优化的自研引擎:高度优化的自研图计算层和存储层,云盘多副本保障数据超高可靠,支持ACID事务。 服务高可用:支持高可用实例,节点故障迅速转移,保障业务连续性。 易运维:提供备份恢复、自动升级、监控告警、故障切换等丰富的运维功能,大幅降低运维成本。 产品主页:https://www.aliyun.com/product/gdb
相关文章
|
6月前
|
小程序 Linux 开发工具
【Linux】Linux 开发工具(vim、gcc/g++、make/Makefile)+【小程序:进度条】-- 详解
【Linux】Linux 开发工具(vim、gcc/g++、make/Makefile)+【小程序:进度条】-- 详解
|
5月前
|
缓存 人工智能 Linux
【Linux】--- 详解Linux软件包管理器yum和编辑器vim
【Linux】--- 详解Linux软件包管理器yum和编辑器vim
91 0
|
6月前
|
Linux Shell 开发工具
【Linux】yum、vim
【Linux】yum、vim
61 2
|
6月前
|
人工智能 数据可视化 Linux
linux环境开发工具---yum与vim
linux环境开发工具---yum与vim
|
6天前
|
存储 缓存 Linux
【Linux】另一种基于rpm安装yum的方式
通过本文的方法,您可以在离线环境中使用RPM包安装YUM并进行必要的配置。这种方法适用于无法直接访问互联网的服务器或需要严格控制软件源的环境。通过配置本地YUM仓库,确保了软件包的安装和更新可以顺利进行。希望本文能够为您在特定环境中部署YUM提供实用的指导。
35 0
|
2月前
|
关系型数据库 MySQL Linux
Linux 安装 mysql【使用yum源进行安装】
这篇文章介绍了在Linux系统中使用yum源安装MySQL数据库的步骤,包括配置yum源、安装MySQL服务、启动服务以及修改root用户的默认密码。
Linux 安装 mysql【使用yum源进行安装】
|
1月前
|
Unix Linux Go
Linux 使用Yum安装Go和配置环境
Linux 使用Yum安装Go和配置环境
|
3月前
|
关系型数据库 MySQL Linux
在CentOS上使用yum安装与使用MySQL
在CentOS操作系统上使用yum包管理器安装和配置MySQL数据库的详细步骤,包括下载MySQL的yum源配置、安装MySQL服务、启动和停止服务、设置开机自启动、获取临时密码、修改root用户密码、授权用户以及处理相关问题。同时,文章还包含了一些操作的截图,帮助用户更直观地理解安装和配置过程。
851 0
在CentOS上使用yum安装与使用MySQL
|
3月前
|
Oracle Java 关系型数据库
yum安装指定版本的openJDK
yum安装指定版本的openJDK
|
3月前
|
Web App开发 缓存 Ubuntu
Linux中yum、rpm、apt-get、wget的区别,yum、rpm、apt-get常用命令,CentOS、Ubuntu中安装wget
Linux中yum、rpm、apt-get、wget的区别,yum、rpm、apt-get常用命令,CentOS、Ubuntu中安装wget
201 11