Linux笔记(8)-gdb调试与makefile编写

  1. 要使用gdb调试,首先需要生成带有调试信息的可执行程序,即带有-g的gcc/g++指令
  2. 给程序打断点
1. 普通断点
    gdb下使用
    break(b) <lineNum>  -->  b 22  <程序执行到22行时停下>
2. 条件断点
    gdb下使用
    break(b) <lineNum> <断点有效条件>   -->     b 22 if i == 15 <在22行设置断点,当i为15时停下>
3. 开始调试
    start   -->     指执行一步就停住
    next(n) -->     单步调试
    continue(c) -->   直接到下一个断点处
    step(s) -->     进入函数体中
    print(p) -->    查看指定变量的值
    ptype   -->     查看变量类型
    display -->     追踪变量的值(对for循环等查看循环过程中的变量值)     -->  undisplay 停止追踪某变量的值
    finish  -->     跳出当前函数(需要去除函数内部设置的断点)
    delete(d) -->   删除对应编号Num的断点
    set     -->     设置某变量的值  -->     set var i = 10
    run(r)  -->     运行程序
  1. makefile的编写
1. 命名规则
    (1) 建议Makefile/makefile
2. 规则格式
    (1) <目标>:<依赖的所有源文件>
        <Tab缩进><执行命令>
        例如:<makefile>
        app:main.c add.c sub.c
            gcc main.c add.c sub.c -o app
    (2) 为了避免一次性编译过于庞大,将目标依赖拆分为多个规则
        当目标依赖文件的时间比生成目标的时间早的话,则对应依赖命令更新依赖,否则不执行对应命令
        app:main.o add.o sub.o
            gcc main.o add.o sub.o -o app
        main.o:main.c
            gcc -c main.c
        add.o:add.c
            gcc -c add.c
        sub.o:sub.c
            gcc -c sub.c
    (3) 使用
            makefile文件目录下执行
            make    -->     生成最终目标文件
    (4) 使用变量来简化规则中的命令
        $<  -->     规则中的第一个依赖
        $@  -->     规则中的目标
        $^  -->     规则中的所有依赖
        %   -->     模式匹配
        obj=man.o add.o sub.o
        target=app
        $(target):$(obj)
            gcc $(obj) -o $(target)
        %.o:%.c
            gcc -c $< -o $@
  1. makefile中常用的函数,利用函数返回值简化makefile编写
1. 获取目录下源文件
    wildcard <dirPath/fileType>     -->     src = $(wildcard ../src/*.c)
2. 匹配替换函数
    patsubst <destFileType> <srcFileType>   -->     obj = $(patsubst ../src/*.c, ../src/*.o, $(src))
  1. 辅助规则
1. 清除原有的obj和target
    clean:
        rm $(obj) $(target) -f  <-f表示强制执行,否则如果不存在obj会报错>
2. 执行指定规则
    make <规则名>   -->     make clean
3. 伪目标
    如果本身目录下有一个以规则名命名的文件时,执行make clean不再会执行
    为了避免该错误,将规则申明为伪目标
    .PHONY:clean
    clean:
        rm $(obj) $(target) -f
4. 忽略执行
    在规则的命令前面添加(-)号,表示如果该条命令执行失败,忽略他继续向下执行
    例如:
    hello:
        -mkdir /aa
        echo "hello Linux"
    第一行在根目录下创建目录肯定会执行失败,如果不加(-)则不会执行下一句命令。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值