1. 编译和调试
1. gcc编译工具
gcc
命令,直接进行编译。
- 预处理
gcc -E
- 编译
gcc -S
编译命令
-
汇编
gcc -c
-
链接
``
2. gdb调试工具
gdb -g
命令
调试工具的作用:
- 跟踪程序的执行
- 程序崩溃前的状态
quit
退出gdb调试。
- 启动gdb
直接启动
gdb
——————> file + 要调试的程序
;
gdb 程序名
gdb 程序名 core文件
动态链接
gdb 程序名 pid
使用这条命令之后被调试的程序将会被暂停了continue
才能够继续运行
run 运行到第一个断点
start 运行在程序的开始处停下来
set args 传递命令行参数
- 设置断点
在函数上设置断点
break func_name
在行上设置断点
break filename:line
查看断点信息和删除断点
info breakpoints
查看断点信息
delete
删除我们所设置的断点。
调试其他基本命令
list
查看调试程序的代码
next
下一步
step
有函数则进入函数的内部
until
行号 跳到这个行
jump+ 行号
同样为跳到这个行
return
遇见问题时,强制离开此函数
print 变量
打印变量的信息
set var p=malloc()
调试过程中 重新制定变量的指向
运行
./a.out
运行链接完成后的程序
_start
从main函数开始进行运行,若是没有main函数,也是可以直接从缺省的地方开始进行运行
查看内存空间
通过gdb来打印大小端字节序
打印函数栈帧
-
看栈帧
bt
-
查看当前栈帧的信息
info frame
-
看寄存器
info registers
-
修改寄存器的值
set $rax=
3. Linux环境安装中文输入法
2. Makefile 项目管理
- makefile
#我 的 第 一 个 makefile
# $@ 目标
# $^ 所有依赖文件
# $ < 第一个依赖文件
# .PHONY 后面写的目标,不论是否是最新的,都强制执行
.PHONY : clean main all
CC = gcc
SRCS = $(wildcard * .c) #wildcard 过滤(通配)函数 当前目录下的所有.c文件
# /root/study/day02/progress
BASEDIR = $(shell pwd)
# /root/study/day02/progress/obj
OBJDIR = $(BASEDIR) / obj
$(shell mkdir - p $(OBJDIR))
OBJS = $(SRCS:.c = .o) #将SRCS对应的.c换乘.o
#/root/study/day02/progress/obj/main.o
OBJS : = $(addprefix $(OBJDIR) / , $(OBJS))
BIN : = main
all : $(BIN)
main : $(OBJS)
$(CC) - o $@ $ ^
# %通配符
$(OBJDIR) / % .o : % .c
$(CC) - c $ < -o $@
clean :
rm - rf $(OBJS)
rebuild : clean main
- makefile基本操作
make
将我们所需要的主函数进行编译
再次进行make
操作时候,系统会显示已是最新版本的main.o
如果需要编译某个文件,则进行make 某.o文件
make
一次输入,全部编译
- makefile的文件分类
make rebuild
查找到相关目标的信息
3. 冯诺依曼
0. 缓存
-
scanf
缓存
-
printf
缓存
1. 冯诺依曼
- 自动从存储器中取出命令并执行
- 执行指令的过程