目录:
- gcc
- gdb
- Makefile
环境:centos7系统
- gcc
Step1:编辑hello.c
Step2:gcc命令格式为:
gcc [选项] 要编译的文件 [选项] [目标文件]
gcc hello.c -o hello
执行命令生成了可执行文件,gcc的工作流程是:预处理>编译>汇编>连接。下面详细查看各种命令:
Step3:-E 只进行预处理,生成预处理文件hello.i
查看hello.i的内容发现,stdio.h的内容被加进来。
Step4:-S 只进行编译,不汇编,生成汇编代码hello.s
hello.s:
Step5:-c 只进行编译,不进行连接,生成目标文件.o
Step6:最后,进行链接,就可以生成可执行文件hello
Step7:-g 在可执行文件中,包含标准调试信息。
可执行文件hello2带有标准调试信息,可以使用gdb调试器调试。
Step8:-O2 完成程序的优化
- gdb
Step1:编辑test.c
Step2:编译生成带有调试信息的二进制可执行文件test
Step3:使用gdb进行调试。显示gdb的版本等信息。
Step4:l(list)命令用于查看代码文件。每行都有行号,用于设置断点。
Step5:b(breakpoint)命令用于设置断点。
格式:b 行号
Step6:info 命令,查看断点信息
Step7:r命令用于运行代码。也可以再r后面加行数,从程序指定行开始运行。
Step8:p(print)命令用于查看变量的值
格式:P 变量名
Step9:s命令用于单步运行,s会进入函数内部,而n不会。
Step10:n命令用于单步运行。
Step11:finish用于运行程序,直到当前函数结束。
注:当调试的时候觉得某个函数存在问题,进入函数调试之后发现问题不在这个函数,就可以使用finish命令运行程序,直到当前函数结束。
Step12: c命令用于恢复程序的运行,
注:我们在一个程序中设置了两个断点,而觉得问题不会再这两个断点之间的代码上,可以在查看完第一个断点的变量及堆栈情况后,使用c命令恢复程序的正常运行,代码就会停在第二个断点处。
Step13:q(quit)用于推出gdb调试。
- Makefile
Step1:编辑C程序
Step2:gcc编译可执行文件
Step3:编辑make file
makefile文件的三大构成要素:目标、依赖、命令。
Makefile有三个非常有用的变量。分别是$@,$^,$<代表的意义分别是:
$@--目标文件,$^--所有的依赖文件,$<--第一个依赖文件。
Step4:运行makefile
Step5:改写makefile, 用变量进行替换
Step6:首先make clean 然后 make效果一样
Step7: 改写makefile,使用自动变量
Step8:首先make clean,然后make