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
相关文章
|
8月前
|
存储 Linux 开发工具
Linux环境下使用Buildroot配置软件包
使用Buildroot可以大大简化嵌入式Linux系统的开发和维护工作,但它需要对Linux系统和交叉编译有深入的理解。通过上述步骤,可以有效地配置和定制软件包,为特定的嵌入式应用构建高效、稳定的系统。
945 11
|
10月前
|
Linux
Linux环境下的UDEV机制及其与守护进程的关联
实际使用时管理员需要熟悉编写合适udev rules去满足特殊需求;同时也需要注意避免编写过度复杂导致无法预料结果rules.UDEVD虽然稳健但错误配置可能导致无法预料问题因此需谨慎处理相关配置工作.
373 16
|
人工智能 Linux 开发工具
linux 对文件内容的查看、归档 及 vim基本操作
linux 对文件内容的查看、归档 及 vim基本操作
|
Unix Linux 开发工具
在Linux中,有哪些基本的 Vim 命令?
在Linux中,有哪些基本的 Vim 命令?
|
存储 Linux 编译器
linux中vim介绍以及常用命令大全
linux中vim介绍以及常用命令大全
445 8
|
存储 Linux Shell
常用vim命令和vim基本使用及Linux用户的管理,用户和组相关文件
这篇文章介绍了Vim编辑器的基本使用、常用命令和模式,以及Linux系统中用户和组的管理方法,包括用户和组相关文件如/etc/passwd、/etc/shadow和/etc/group的说明。
常用vim命令和vim基本使用及Linux用户的管理,用户和组相关文件
|
搜索推荐 Linux 开发工具
|
Linux Shell 持续交付
Linux下vim的配置
本文介绍了如何对vim进行基础配置,如行号显示、缩进设置等,并推荐了一种自动化部署方案,通过链接下载预配置的vim环境脚本,简化了配置过程,提升开发效率。
685 3
Linux下vim的配置
|
Unix Linux 开发工具
Linux Vim的 命令大全
Linux Vim的 命令大全
377 0