调试器(gdb)
1.调试器是GNU计划的工具;内核调试KGDB
2.程序中错误的分类:语法错误(编译时错误)逻辑错误(内存错误,运行时错误)
3.gdb的功能:运行程序设置断点查看变量的值
4.使用:
(1)
layout asm显示源码
layout src显示
layout split同时显示源码和汇编
(2)
run正常执行
finish退出
continue结束当前断点继续往下执行直到遇到新的断点
break+行号
break+函数名
break+行号+if条件
info break查看断点信息
enable+断点编号 使能断点
disable+断点编号 关闭断点
delete 删除断点
print打印
(3)单步执行
next(n)继续往下执行(不能进入子函数)
step(s)(可以进入子函数)
工程管理器-make(如何编写makefile文件)
1.工程管理器:编译很多个文件(类型不同、存放在不同目录、资源文件使用)组成的软件代码结构。
实现根据makefile文件的内容进行自动编译。
-
“自动编译”:
根据makefile文件的内容进行自动编译;
根据文件时间戳来判断文件是否需要编译。 -
多次make的方法:
修改文件
删除文件
伪目标(.PHONY)执行命令,不生成对应文件
(1)makefile是一个脚本文件(批处理)
(2)
语法包含:目标、依赖、命令
格式: 目标:依赖
按下tab后键入命令
含义:执行命令,依赖这个文件,最终生成目标
(3)执行顺序:自上向下,当目标依赖的文件又是一个目标时,会先跳转到该目标去执行相关命令。
make+目标名:从该目标开始,自上向下执行
make -f用于指定所需依托生成可执行文件的makefile文件
- makefile中常用的的内置变量:
@关闭回显
$@目标体后的依赖
$(变量)定义变量
#用于注释
为什么将.c文件先编译生成.o文件,再由.o文件生成可执行文件?
源文件到可执行文件:预处理、编译、汇编、链接(假设每个过程经历1s)
则gcc hello.c -o hello 执行需要4s
例:cal:main.c add.c sub.c div.c mul.c
gcc *.c -o cal
直接执行则需20s,修改其中任一文件重新执行仍需20s
.o是完成了前三步的操作,修改其中任一文件重新执行则为4+4=8s
优化结构的方法:
建立功能目录mkdir xxx
mv .c xxx
功能目录管理软件代码:
结构:
(1)总控Makefile:进入各个功能目录执行make命令,并将所有.o文件链接生成可执行文件
(2)功能目录Makefile:将功能目录下的源文件编译生成目标文件.o
(3)scripts目录头文件Makefile:定义变量,供其他makefile使用
- 阅读makefile的顺序为312