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

分析各个目标和依赖之间的关系

根据依赖关系自底向上执行命令

根据修改时间比目标新,确定更新

如果目标不依赖任何条件,则执行对应命令,以示更新

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)

原文地址:https://www.cnblogs.com/XiaoGuanYu/p/8400455.html