文章目录
前言
接着上篇文章,我们继续来讲Linux调试工具中gdb的语法和使用方法以及在Linux下上传自己的文件到Gitte码云之上。
正文开始!!!
一、Linux调试器-gdb使用
1. 背景
程序的发布方式有两种,debug模式和release模式
Linux gcc/g++出来的二进制程序,默认是release模式
要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项
2. 开始使用
gdb [文件名]进入gdb调试目录
gdb binFile 退出: ctrl + d 或 quit 调试命令:
list/l 行号:显示binFile源代码,接着上次的位置往下列,每次列10行。
list/l 函数名:列出某个函数的源代码。
r或run:运行程序。
n 或 next:单条执行。
这个命令必须和打断点一起执行!
s或step:进入函数调用
break(b) 行号:在某一行设置断点
break 函数名:在某个函数开头设置断点
info break :查看断点信息。
finish:执行到当前函数返回,然后停下来等待命令
print§:打印表达式的值,通过表达式可以修改变量的值或者调用函数
p 变量:打印变量值。
continue(或c):从当前位置开始连续而非单步执行程序
delete breakpoints:删除所有断点
display 变量名:跟踪查看一个变量,每次停下来都显示它的值
undisplay:取消对先前设置的那些变量的跟踪
until X行号:跳至X行
quit:退出gdb
Linux项目自动化构建工具-make/Makefile
背景
会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力
一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作
makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率
make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可见,makefile都成为了一种在工程方面的编译方法
make是一条命令,makefile是一个文件,两个搭配使用,完成项目自动化构建。
实例代码
C代码
#include <stdio.h>
int main()
{
printf("hello Linux!\n");
return 0;
}
上节课我们使用gcc下可以编译这段代码
gcc test.c -o test
但是如果我们不小心将顺序搞反了呢!
此时我们再来查看发现源文件都被覆盖掉了
为了避免这种问题的发生,我们可以使用makefile自动化构建工具。
因此我们可以回答问什么要使用make/makefile:
1.减少出现未定义的错误
2.减少构建项目的成本
3. 怎么创建makefile
我们前面提到了makefile是一个文件,因此我们在当前路径下创建一个makefile
touch makefile
3.1 编写makefile
makefile:在当前路径下的一个普通文件
makefil内部包含两个东西:1.依赖关系 2.依赖方法
我们进入makefile输入
test:test.c
gcc test.c -o test
依赖关系
上面的文件 hello ,它依赖 hello.o
hello.o , 它依赖 hello.s
hello.s , 它依赖 hello.i
hello.i , 它依赖 hello.c
依赖方法
gcc hello.* -option hello.* ,就是与之对应的依赖关系
项目清理
工程是需要被清理的
像clean这种,没有被第一个目标文件直接或间接关联,那么它后面所定义的命令将不会被自动执行,
不过,我们可以显示要make执行。即命令——“make clean”,以此来清除所有的目标文件,以便重编
译。
但是一般我们这种clean的目标文件,我们将它设置为伪目标,用 .PHONY 修饰,伪目标的特性是,总是被
执行的。
可以将我们的 hello 目标文件声明成伪目标,测试一下
原理
make是如何工作的,在默认的方式下,也就是我们只输入make命令。那么,
- make会在当前目录下找名字叫“Makefile”或“makefile”的文件。
- 如果找到,它会找文件中的第一个目标文件(target),在上面的例子中,他会找到“hello”这个文件,并把这个文件作为最终的目标文件。
- 如果hello文件不存在,或是hello所依赖的后面的hello.o文件的文件修改时间要比hello这个文件新(可以用 touch 测试),那么,他就会执行后面所定义的命令来生成hello这个文件
- 如果hello所依赖的hello.o文件不存在,那么make会在当前文件中找目标为hello.o文件的依赖性,如果找到则再根据那一个规则生成hello.o文件。(这有点像一个堆栈的过程)
- 当然,你的C文件和H文件是存在的啦,于是make会生成 hello.o 文件,然后再用 hello.o 文件声明make的终极任务,也就是执行文件hello了。
- 这就是整个make的依赖性,make会一层又一层地去找文件的依赖关系,直到最终编译出第一个目标文件。
- 在找寻的过程中,如果出现错误,比如最后被依赖的文件找不到,那么make就会直接退出,并报错,而对于所定义的命令的错误,或编译不成功,make根本不理。
- make只管文件的依赖性,即,如果在我找了依赖关系之后,冒号后面的文件还是不在,那么对不起,
clean详解
1.工程是需要被清理的
2.像clean这种,没有被第一个目标文件直接或者间接关联,那么它后面所定义的命令将不会被自动执行,不过,我们可以显示要make执行。即命令 – “make clean”,以此来清楚所有的目标文件,以便重编译
3.但是一般我们这种clean的目标文件,我们将设置为伪目标,用.PHONY 修饰,伪目标的特性是:总是被执行。
使用 git 命令行
安装 git
yum install git
在 Gitee 创建项目
网站请点这里!
在创建好的项目页面中复制项目的链接, 以备接下来进行下载
新创建的仓库,需要先点击初始化readme(如上图)!
然后进行开源,才可上传的Linux下!!!
下载项目到本地
创建好一个放置代码的目录
git clone [url]
这里的 url 就是刚刚建立好的 项目 的链接
注意:如果在输入过程中不小心输入错误,不能按删除键进行删除,而是要按ctrl+删除键进行删除。同时密码是不进行回显的,所以密码要输入正确。如果我们第一次输入失败也无妨,我们可以重新git clone 【url】重新输入账号和密码
进入就已经有了刚刚初始化的文件!
三板斧第一招: git add
将代码放到刚才下载好的目录中
在这里我们新建一个文件夹用于测试
git add [文件名]
将需要用 git 管理的文件告知 git
三板斧第二招: git commit
提交改动到本地 提交的时候应该注明提交日志 , 描述改动的详细内容 .
这里固定的格式如下
git commit -m “输入相关的介绍”
需要注意的是,这里的描述一定需要重视,不可乱写胡写,因为这里的描述在我们以后进行查找已经误删除恢复文件时都起到了至关重要的作用。
三板斧第三招:git push
同步到远端服务器上,使用以下命令
git push
这样就上传到你的远程仓库啦!!!
总结
(本章完!)