GNU toolchain

  • 编译工具链
    • gcc
      • 常用选项
        • -E: 生成预处理后的文件
        • -S: 生成汇编文件
        • -c: 生成目标文件
        • 无: 生成可执行程序
        • -Wall: 生成警告信息
        • -g: 生成调试信息
        • -O0, -O1, -O2, -O3
        • -Dmacro
        • -Dmacro=value
        • -Idir
    • 条件编译
      • 在预处理阶段决定包含哪些代码片段,不包含哪些代码片段
      • 预处理指令
        • #if
          • 运算符: defined
        • #ifdef
        • #ifndef
      • 作用
        • 提高代码的可移植性
        • 给宏提供默认值
        • 避免头文件重复包含
        • #if 0 代码片段 #endif
          • 条件屏蔽
    • gdb
      • 观念
        • 调试代码是写代码难度的两倍
        • 程序报错的位置,很可能不是真正出错的位置
        • 调试的基本步骤
          • 走一走
          • 停一停
          • 看一看
            • 查看程序的状态
            • 你对程序的预期
      • 命令
        • 编译:加 -g
        • 进入调试界面
          • gdb 可执行程序
        • 退出调试界面
          • quit / q
        • 设置命令行参数
          • set args 其它的命令行参数
        • 查看代码
          • layout src
          • layout asm
          • layout regs
          • layout next
          • layout prev
          • refresh
            • 刷新
        • 走一走
          • run / r
          • next / n
          • step / s
          • finish
          • continue / c
        • 停一停
          • break / b
          • info break / i b
          • delete [NUM]
          • ignore NUM COUNT
        • 看一看
          • print / p
            • print 表达式
            • print 表达式=值
          • display
            • display 表达式
            • info display
            • undisplay [NUM]
          • info locals
          • info args
          • info registers
          • bracktrace / bt
          • frame N
          • x/nfu
            • 查看内存
      • 查看 core 文件
        • 程序崩溃时的内存快照
          • “黑匣子”
        • 复现错误
        • gdb 可执行程序 core文件
          • 看一看