【linux学习】linux工具篇(下)
Linux调试器-gdb使用Linux项目自动化构建工具-make/Makefile我是程序员小青蛙下面分享linux的工具利用前言程序的发布方式有两种debug模式和release模式Linux gcc/g出来的二进制程序默认是release模式要使用gdb调试必须在源代码生成二进制程序的时候,加上-g选项一、基本命令gdb binFile退出ctrl d或quit调试命令listl行号显示binFile源代码接着上次的位置往下列每次列10行。listl函数名列出某个函数的源代码。r或run运行程序。n或next单条执行。s或step进入函数调用break(b)行号在某一行设置断点break函数名在某个函数开头设置断点info break查看断点信息。finish执行到当前函数返回然后挺下来等待命令print(p)打印表达式的值通过表达式可以修改变量的值或者调用函数p变量打印变量值。set var修改变量的值continue(或c)从当前位置开始连续而非单步执行程序run(或r)从开始连续而非单步执行程序delete breakpoints删除所有断点delete breakpoints n删除序号为n的断点disable breakpoints禁用断点enable breakpoints启用断点info(或i) breakpoints参看当前设置了哪些断点display变量名跟踪查看一个变量每次停下来都显示它的值undisplay取消对先前设置的那些变量的跟踪until X行号跳至X行breaktrace(或bt)查看各级函数调用及参数infoi) locals查看当前栈帧局部变量的值quit退出gdb1。生成可调试文件gcc test.c -o test -g2.安装gdb3.进入调试命令使用l -查看内容break(b) -打断点info break -查看断点运行会有调用次数显示禁用第一个断点再次运行发现没有调用enable break -启用断点delete breakpoints删除所有断点delete breakpoints n删除序号为n的断点基本功能看上面就行不演示了二、Linux项目自动化构建工具-make/Makefile会不会写makefile从一个侧面说明了一个人是否具备完成大型工程的能力一个工程中的源文件不计数其按类型、功能、模块分别放在若干个目录中makefile定义了一系列的规则来指定哪些文件需要先编译哪些文件需要后编译哪些文件需要重新编译甚至于进行更复杂的功能操作makefile带来的好处就是——“自动化编译”一旦写好只需要一个make命令整个工程完全自动编译极大的提高了软件开发的效率。make是一个命令工具是一个解释makefile中指令的命令工具一般来说大多数的IDE都有这个命令比如Delphi的makeVisual C的nmakeLinux下GNU的make。可见makefile都成为了一种在工程方面的编译方法。make是一条命令makefile是一个文件两个搭配使用完成项目自动化构建。原理make是如何工作的,在默认的方式下也就是我们只输入make命令。那么1. make会在当前目录下找名字叫“Makefile”或“makefile”的文件。2.如果找到它会找文件中的第一个目标文件target在上面的例子中他会找到“hello”这个文件并把这个文件作为最终的目标文件。3.如果hello文件不存在或是hello所依赖的后面的hello.o文件的文件修改时间要比hello这个文件新可以用touch测试那么他就会执行后面所定义的命令来生成hello这个文件。4.如果hello所依赖的hello.o文件不存在那么make会在当前文件中找目标为hello.o文件的依赖性如果找到则再根据那一个规则生成hello.o文件。这有点像一个堆栈的过程5.当然你的C文件和H文件是存在的啦于是make会生成hello.o文件然后再用hello.o文件声明make的终极任务也就是执行文件hello了。6.这就是整个make的依赖性make会一层又一层地去找文件的依赖关系直到最终编译出第一个目标文件。7.在找寻的过程中如果出现错误比如最后被依赖的文件找不到那么make就会直接退出并报错而对于所定义的命令的错误或是编译不成功make根本不理。8. make只管文件的依赖性即如果在我找了依赖关系之后冒号后面的文件还是不在那么对不起我就不工作啦。项目清理工程是需要被清理的像clean这种没有被第一个目标文件直接或间接关联那么它后面所定义的命令将不会被自动执行不过我们可以显示要make执行。即命令——“make clean”以此来清除所有的目标文件以便重编译。但是一般我们这种clean的目标文件我们将它设置为伪目标,用.PHONY修饰,伪目标的特性是总是被执行的。在Makeflie文件中编写功能形成依赖关系我们也可以分步进行对gcc的编译依赖关系上面的文件hello,它依赖hell.ohello.o,它依赖hello.shello.s,它依赖hello.ihello.i,它依赖hello.c依赖方法gcc hello.*-option hello.*,就是与之对应的依赖关系自动寻找这样可以基本实现项目编译全部总结调试gdb的基本命令和构建自动化工具的基本认识谢谢观看。