核心要点:Makefile + gdb

核心要点:Makefile + gdb


一、Makefile
  1. 作用

    • 提高编译效率:仅重新编译修改过的文件(基于时间戳判断)。
    • 多文件项目联合编译(如 main.cstudent.cteacher.c)。
  2. 基本结构

    • 文件名:Makefile 或 makefile(后者优先级更高)。
    • 规则格式:

      makefile

       
          
      目标: 依赖
      shell指令(需以 Tab 缩进)
  3. 分步编译

    • 汇编gcc -c *.c -o *.o
    • 链接gcc *.o -o 可执行文件
    • 执行./可执行文件
  4. 变量与赋值

    • 定义与引用变量 = 值,引用为 $(变量)
    • 赋值方式
      • =:递归赋值(最终取值)。
      • :=:立即赋值。
      • +=:追加赋值(空格分隔)。
      • ?=:条件赋值(未定义时赋值)。
  5. 特殊变量

    • $@:目标文件名。
    • $^:所有依赖文件。
    • $<:第一个依赖文件。
  6. 内置函数

    • wildcard:查找文件,如 $(wildcard *.c)
    • patsubst:模式替换,如 $(patsubst %.c,%.o,*.c)
  7. 伪目标

    • 声明:.PHONY: 目标,避免与同名文件冲突。

二、gdb
  1. 核心功能

    • 启动程序、设置断点、查看运行状态、修改变量。
  2. 调试步骤

    • 生成调试文件gcc -g *.c -o 可执行文件(必须加 -g)。
    • 启动调试gdb 可执行文件
  3. 常用命令

    命令功能
    b 函数名/行号设置断点
    run启动程序
    bt查看堆栈
    print 变量打印变量值
    c继续执行
    next单步执行(跳过函数)
    step单步执行(进入函数)
    info b查看断点信息
    d 断点编号删除断点
    quit退出 gdb
  4. 调试 core 文件

    • 生成 core 文件
      • 确保权限:ulimit -c unlimited
      • 崩溃后生成 core 文件。
    • 调试命令gdb 可执行文件 core
  5. 调试正在运行的程序

    • 查看进程号:ps -ajx | grep 程序名
    • 附加调试:gdb -p 进程号

注意事项
  • Makefile:依赖关系需明确,避免冗余编译。
  • gdb:调试前需确保编译时添加 -g 选项,否则无法获取调试信息。
  • core 文件:若未生成,检查系统配置(如 /proc/sys/kernel/core_pattern)。

思考 18 秒

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值