gdb调试:
gcc -g main.c -o main 在编译程序前加上“-g”为调试做准备
gdb main 调试程序
输入“list”显示代码,可缩写成“l” ,默认显示10行,接着再输入list或者回车可以继续显示
list+行号 从此行号开始显示
list+函数名 从此函数名开始显示
回车的作用:重复执行上一次输入的语句
设置断点:break(b)
break +行号:例如break 11 ,在第十一行插入断点
break+函数名:例如break f,在f函数插入断点
break 行号 if 条件 :例如break 5 if i 10:在i=10时,第五行断点生效
查看所有的断点信息:info break(info b)
run(r):执行代码,直到到第一个断点停下
next(n):单步运行,但不进入子程序
step:单步运行,进入子程序
continue(c):程序继续运行,直到下一个断点
print(p)+变量:打印变量的值
finish(f):结束当前函数的运行
watch+变量:一直观察变量的变化过程
delete+断点序号:删除第几个断点,根据设置断点的顺序编号
clear+行数:删除第几行的断点
start:使程序运行到main函数停止
enable:使第几个断点生效
disable:使第几个断点失效
quit(q):退出调试
make的使用:在编译多个文件时,使用gcc的效率较低,gcc会编译所有的文件,而定义make规则后,只会编译那些修改过的文件。
vim makefile:创建makefile文件,也可创建Makefile文件,当makefile和Makefile文件同时存在时,系统默认使用makefile文件。当makefile文件写完后,执行make命令进行编译,生成可执行文件。
若不使用 makefile作为文件名时,例如文件名为abc,abc写完后,使用make -f abc 指定使用此文件。
1.最终生成的目标文件 :依赖文件
2. tab键+gcc命令
即main文件由main.o add.o sub.o mul.o div.o main.h生成,用gcc编译得到main可执行文件
3.目标文件:依赖文件
4.tab键+gcc命令
即main.o由main.c生成,用gcc -c main.c生成main.o文件
由于make是从下面开始执行,所以从下面一次往上依次是.c文件到.o文件到可执行文件。
完成后即可使用make,一键编译,生成可执行文件,简便操作。
也可在makefile文件中执行其他操作:
.PHONY:clean 声明clean ,当执行make clean操作时,会执行后面的命令,但是若同目录下存在clean这个文件名,没有.PHONY 声明时,则默认对同名文件执行操作,不会进行命令。
当依赖文件过多时,可使用变量。用obj变量来指代依赖文件,编译时用$(obj)来编译 。如下图:
在makefile中,存在系统默认的自动化变量
$^:代表所有的依赖文件
$@:代表目标
$<:代表第一个依赖文件
如下图所示:
Makefile中“#”字符后的内容被视作注释
@取消回显,当运行make时不再输出gcc -c 内容
使用@之前:
使用@之后: