[Linux系列]inux的gcc调试功底和makefile项目管理笔记,看着杂却很实用

在这里插入图片描述

1. 编译和调试

1. gcc编译工具

gcc 命令,直接进行编译。
在这里插入图片描述

  1. 预处理
    gcc -E
    在这里插入图片描述
  2. 编译
    gcc -S 编译命令
    在这里插入图片描述

在这里插入图片描述

  1. 汇编
    gcc -c
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  2. 链接
    ``
    在这里插入图片描述
    在这里插入图片描述

2. gdb调试工具

gdb -g命令
调试工具的作用:

  • 跟踪程序的执行
  • 程序崩溃前的状态
    quit 退出gdb调试。
  1. 启动gdb

直接启动

gdb ——————> file + 要调试的程序
gdb 程序名
gdb 程序名 core文件

在这里插入图片描述

动态链接

gdb 程序名 pid 使用这条命令之后被调试的程序将会被暂停了continue才能够继续运行
run 运行到第一个断点
start 运行在程序的开始处停下来
在这里插入图片描述
set args 传递命令行参数
在这里插入图片描述
在这里插入图片描述

  1. 设置断点
    在函数上设置断点

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 项目管理

  1. 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
  1. makefile基本操作
    make 将我们所需要的主函数进行编译
    在这里插入图片描述
    再次进行make操作时候,系统会显示已是最新版本的main.o
    如果需要编译某个文件,则进行 make 某.o文件
    在这里插入图片描述
    make一次输入,全部编译
    在这里插入图片描述
  2. makefile的文件分类
    在这里插入图片描述
    make rebuild 查找到相关目标的信息
    在这里插入图片描述
  • 在这里插入图片描述
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Luckily0818/article/details/107420424