青岛市建设监督管理局网站,云服务器wordpress如何上线,北京seo优化排名,百度网站推广找谁做gdb、make/Makefile 引言调试器gdb介绍常用指令 自动化构建工具make/Makefile介绍使用依赖关系与依赖方法编辑Makefile伪目标 总结 引言
在上一篇文章中介绍了Linux中的编辑器vim与编译器gcc与g#xff1a; 戳我看vim与gcc详解哦
在本篇文章中将继续来介绍Linux中的工具 戳我看vim与gcc详解哦
在本篇文章中将继续来介绍Linux中的工具调试器gdb与项目自动化构建工具make/Makefile
调试器gdb
介绍
在Windows环境中我们使用vs时常常会逐过程与逐语句地调试代码以更高效地寻找到错误的位置。在Linux中也有其调试器即gdb
前面我们应该知道程序的发布版本有两种即调试版本Debug与发布版本Release。Debug版本中包含有调试信息所以可以支持调试而Release版本中不包含调试信息同时还进行了一些优化。 在vs中我们可以调整发布版本 在Linux中默认的发布版本为Release版本无法直接进行调试需要以Debug版本发布才可以 使用 gcc 原文件 -o 可执行文件 -g 就可以实现按照Dubeg版本发布 显然Release版本比ebug版本多占一些空间即调试信息所占的空间。
常用指令
为方便展示使用vim编辑一段代码 gdb 可执行程序名进入调试环境 listl 行号从某行开始显示源代码不加行号默认从第一行开始显示连续l接着上次的位置往下列可以直接回车默认输入上次的指令每次列10行 listl 函数名列出某个函数的源代码其实就是从某个函数开始显示10行代码也可以继续向下显示 r/run运行程序就相当于我们vs环境中调试时的f5从头开始执行程序遇到断点会停止运行 continue / c从当前位置开始连续执行程序遇到断点会停止运行 break/b 行号在某一行设置断点 设置断点后再r运行程序时就会在断点处停下 break/b 函数名在某个函数开头设置断点 设置后断点的行数为函数的第一行代码 info/i break/b 查看断点信息 delete breakpoints n / d n删除序号为n的断点 delete breakpoints / d删除所有断点 disable breakpoints禁用断点 断点在禁用后断点会继续保留但是在运行时并不会在该断点处停止 enable breakpoints启用断点 n / next逐过程执行 相当于vs环境中的f10即不进入函数逐过程执行。在执行时会显示当前执行的语句返回值 在使用逐过程逐语句执行时首先需要r运行起来从断点处开始执行 s / step逐语句执行 相当于vs环境中的f11即进入函数逐语句执行。在执行时会显示当前执行的语句返回值 finish执行到当前函数返回然后停下来等待命令 有时候在进入函数后其中的代码过于繁琐这时再逐过程的执行到结束就会很麻烦所以finish就可以直接执行到函数结束 假设存在一函数func 在进入这个函数后就可以finish到函数结束 p 变量名打印变量值 set var 变量名 val修改变量的值 display 变量名跟踪查看一个变量每次停下来都显示它的值 跟踪显示变量时也是有序号的。 undisplay 序号取消对变量的跟踪显示 通过序号取消跟踪 until X行号运行至X行 quit/ q退出gdb
自动化构建工具make/Makefile
介绍
make是一条命令makefile是一个文件两个搭配使用完成项目自动化构建
一个工程中的源文件不计数其按类型、功能、模块分别放在若干个目录中makefile定义了一系列的规则来指定哪些文件需要先编译哪些文件需要后编译哪些文件需要重新编译甚至于进行更复杂的功能操作 makefile带来的好处就是自动化编译我们写好之后只需要一个make命令整个工程完全自动编译极大的提高了软件开发的效率。 make是一个命令工具能够解释makefile中指令。一般来说大多数的IDE集成开发环境都有这个命令比如Delphi的makeVisual C的nmakeLinux下GNU的make。
在使用make命令后会在当前工作目录下寻找makefile文件并进行自动的解释构建
使用
依赖关系与依赖方法
我们在通过原文件生成目标文件时目标文件需要依赖原文件在可以产生没有原文件就没有目标文件这就是依赖关系而如何通过原文件生成目标文件的方法即依赖方法。
例如我们有头文件test.h与源文件test.c要生成一个可执行文件test。 其中test依赖test.h与test.c就是依赖关系gcc test.h test.c -o test 就是对应的依赖方法。
编辑Makefile
寻找逻辑
当make在当前工作目录下找到makefile / Makefile文件后 会找到其开始的第一个文件为目标文件如果目标文件不存在或是其所依赖原文件的文件修改时间要比目标文件新就会执行后面所定义的命令依赖方法来生成目标文件如果目标文件所依赖的原文件不存在那么make会在Makefile中继续寻找目标为该原文件的依赖关系与依赖方法以生成该文件make会一层又一层地去找文件的依赖关系直到最终编译出第一个目标文件在找寻的过程中如果出现错误比如最后被依赖的文件找不到那么make就会直接退出并报错。
所以在编辑Makefile时首先就要写出目标文件及其依赖文件
test: test.c test.h然后在其下一行写出其依赖方法需要注意的是依赖方法前的空格必须为Tab否则会报错 在书写时简便起见所有目标文件可以用 $ 表示所有依赖文件可以用 $^表示 gcc -o $ $^ -stdc99到现在我们的Makefile就可以简单进行使用了这里有一个简单的for循环来测试
伪目标
make在使用时当目标文件已经存在且其最新修改时间比其依赖文件晚的话连续make是不会生成多个目标文件的 而伪目标是可以总是被执行的即任何时候想要执行都是可以的用.PHNOY修饰。
生成的工程是需要被清理的但是清理操作显然不能因为该目标文件已存在就不执行。所以clean这样的目标文件就可以被声明成伪目标clean这个目标文件不需要依赖文件只需要借助它来执行其下的删除指令即可
.PHNOY: clean //声明伪目标文件
clean: //依赖关系无依赖文件rm -f test //依赖方法有了伪目标后就可以随时清理程序了。需要make clean命令
总结
到此关于Linux工具的基本知识就全部介绍完了
如果大家认为我对某一部分没有介绍清楚或者某一部分出了问题欢迎大家在评论区提出
如果本文对你有帮助希望一键三连哦
希望与大家共同进步哦