谈谈Gdb调试工具(Makfile项目管理)是怎么使用的

一、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工作原理

  1. 分析各个目标和依赖之间的关系
  2. 根据依赖关系自底向上执行命令
  3. 根据修改时间比目标新,确定更新

如果目标不依赖任何条件,则执行对应命令,以示更新。
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 查看本文章

猜你喜欢

转载自blog.csdn.net/m0_50662680/article/details/110232731
今日推荐