Linux04

编译工具链

IDE(集或开发环境):visual studio, clion, Eelipse, Xcode
SDK(SOftware Development kit )

  • GCC
    • GNU
    • C
    • Compiler
  • Clang :(编译快)
    在这里插入图片描述
    在这里插入图片描述
预处理
  • 作用:执行预处理指令;
    1. #include<stdio.h>

    2. #define N 5

    3. #define SIZE (sizeof(a)/sizeof(a[0]))

    4. 宏开关
      1.#if #else #endif

      • 只执行预处理:$ gcc -E main.c -o main.i
        在这里插入图片描述

      2.#ifdef #else #endif (条件编译)
      在这里插入图片描述
      3.#ifndef #else #endif (防御式声明,防止头文件被包含多次)
      在这里插入图片描述

编译-S(扩展)
  • 作用:把预处理后的代码翻译成汇编代码
    在这里插入图片描述
  1. 基本操作:
push(入栈)              mov(移动)              call(函数调用)         ret(函数返回)
pop(出栈)                lea(load effective address) 取地址&
                                      加载有效地址
  1. 寄存器
    在这里插入图片描述

  2. 数据单位

  • X86架构:8086
    • 数据总线:16bits
    • 地址总线:20bits
      word:16bits
      L:long word 32bits
      q:quadra word 64bits
      first__double__triple__quadra__penta
      在这里插入图片描述

总结

  • C语言中的变量名对应汇编中的地址
  • C语言中的类型对应汇编中的长度
  • 函数调用都有自己独立的栈帧,并且参数是值传递
  • 循环是通过跳转实现的
汇编(-c)

作用:将汇编代码转换成目标平台的机器代码。
gcc -c main.s -o main:生成目标文件; ``

链接

作用:为每一个符号(全局变量、函数名)找到相应的定义
$ gcc main.o -o main

总结

  • 预处理:-E
  • 编译:-S
  • 汇编:-c
  • 链接:无
  • -D 定义宏
  • -Wall 显示所有警告
  • 优化Optmize
    • -O0 不优化(低)
    • -O1 产品
    • -O2
    • -O3 (高;最激进的优化级别,一般不使用)

GDB

在这里插入图片描述

  • $ gcc main.c -o main -g
    在这里插入图片描述

命令

  • list/l [文件名:] [行号|函数名] 查看源代码
  • run/r 运行程序
  • break/b [文件名:] [行号|函数名] 打断点
  • step /s 单步调试
  • continue /c 继续
  • next /n 逐过程
  • finish 执行完这个函数
  • info break /i b 查看断点信息
  • delete /d [编号] 删除所有断点或删除n号断点
  • ignore [n] [count] 忽略 n号断点 count 次

监视

  • print /p 表达式
  • display 表达式
  • info display
  • undisplay [n] 删除所有监视点、删除 n号监视点

查看内存(了解)
查看内存
在这里插入图片描述

GDB查看core黑匣子

“黑匣子”:——core文件 (将程序崩溃瞬间栈的内容保存下来)

在这里插入图片描述

  • # sudo echo "core"> /proc/sys/kernel/cor_pattern 需要切换成root权限
    在这里插入图片描述
GDB设置命令行参数

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值