一、gdb调试工具
gcc -g main.c -o main
常用命令:
- 命令 简写 作用
- help h 按模块列出命令类
- help class 查找某一类型的具体命令
- list l 查看代码,可跟行号和函数名
- list - l 网上查看代码
- quit q 退出gdb
- run r 全速运行程序
- start 单步执行,运行程序,停在第一行执行语句
- next n 逐过程执行
- step s 逐语句执行,遇到函数,调到函数内执行
- backtrace b 查看函数的调用栈帧和层级关系
- info I 查看函数内部局部变量的数值
- frame f 切换函数的栈帧
- finish 结束当前函数,返回函数调用点
- set 设置变量的值
- run arvg[1] argv[2] 调试时命令行传递参数
- print p 打印变量和地址
- break b 设置断点,可根据行号和函数名
- delete d 删除断点 d breakpoints NUM
- display 设置观察变量
- undisplay 取消观察变量
- continue 继续全速运行剩下的代码
- enable breakpoints 启用断点
- disable breakpoints 禁用断点
- x 查看内存x /20xw显示20个单元,16进制,4个字节每单元
- watch 被设置观测点的变量发送修改时,打印显示
- i watch 显示观测点
- core文件 ulimit -c 1024 开启core文件,调试时gdb a.out core
- set var 设置调试中变量的值 例如 n=10 set var n=100
二、gdb调试模式
- gdb调试模式
- run全速运行
- start 单步调试
- set follow-fork-mode child/parent #Makefile项目管理 跟踪子进程和父进程
三、Makfile项目管理
- 项目代码编译管理
- 节省编译项目时间
- 一次编写终身受益
操作示例文件:add.c sub.c mul.c dive.c main.c
基本原则
三要素:目标、条件、命令。
四、Makefile工作原理
- 分析各个目标和依赖之间的关系
- 根据依赖关系自底向上执行命令
- 根据修改时间比目标新,确定更新
如果目标不依赖任何条件,则执行对应命令,以示更新。
clean
- 用途:清除编译生产的中间o文件和最终目标文件
- make clean 如果当前目录下有同名clean文件,则不执行clean对应的命令
- 伪目标声明:.PHONY:clean
- clean命令中的特殊符号
“-“此条命令出错,make也会继续执行后续的命令。如:”-rm main.o”
"@“不显示命令本身,只显示结果。如:”@echo"clean done “”
其他
-make默认执行第一个出现的目标,可通过make dst指定要执行的目标
-distclean目标
-install目标
-make -C指定目录 进入指定目录,调用里面的Makefile
五、简单使用MakeFile
python@ubuntu:~/linuxC/calc$ cat Makefile
目标:依赖(条件)命令
阶段一
#app:add.c sub.c dive.c mul.c main.c
#gcc add.c sub.c dive.c mul.c main.c -o app
阶段二
#app:add.o sub.o dive.o mul.o main.o
#gcc add.o sub.o dive.o mul.o main.o -o app
#add.o:add.c
#gcc -c add.c
#sub.o:sub.c
#gcc -c sub.c
#dive.o:dive.c
#gcc -c dive.c
#mul.o:mul.c
#gcc -c mul.c
#main.o:main.c
#gcc -c main.c
阶段三
#$@表示目标,$^表示所有依赖,$<表示依赖中的第一个
#obj=add.o sub.o mul.o dive.o main.o
#src = $(wildcard *.c)
#obj = $(patsubst %.c,%.o,$(src))
#target = app
#$(target):$(obj)
#gcc $^ -o $@
#%.o:%.c
#gcc -c $< -o $@
阶段四
CPPFLAGS= -Iinclude
CFLAGS= -g -Wall
LDFLAGS=
CC=gcc
#CC=arm-linux-gcc
src = $(wildcard *.c)
obj = $(patsubst %.c,%.o,$(src))
target = app
$(target):$(obj)
$(CC) $^ $(LDFLAGS) -o $@
%.o:%.c
$(CC) -c $< $(CFLAGS) $(CPPFLAGS) -o $@
.PHONY:clean
#彻底清除生生过程文件
clean:
-rm -f *.o
-rm -f app
#彻底清除生生过程文件和生成配置文件
distclean: rm /usr/bin/app
install:cp app /usr/bin
test:
@echo $(src)
@echo $(obj)
扫描二维码关注公众号,回复:
12336535 查看本文章