Linux:2. gcc、gdb、yum

1. C语言程序执行过程

  1. C语言程序运行需要4个步骤:预处理、编译、汇编、链接。
  • 预处理: gcc -E file.c

宏定义 2.文件包含 3.条件编译 这些功能分别用宏定义命令、文件包含命 令、条件编译命令来实现。

  • 编译:

检查代码的规范性、是否有语法错误等。生成.i文件,是与处理过的C原始程序。 无误后生成汇编语言。

  • 汇编:

叫汇编,但是把汇编文件生成目标文件【机器语言,也就是二进制文件】。

  • 链接:.o的目标对象不是可执行的,还需要把所需要的其它目标对象链接在一起。让程序找到调用的函数,对汇编指令进行符号解析、符号重定位等工作,一个可执行文件需要多个目标对象链接在一起才能生成。

这一阶段最后生成可执行文件或库文件

  • 这一过程涉及静态库【如windows下一些dll文件缺失】和动态库,静态库主要在符号重定位阶段,把库中有关代码拷贝进来。而动态库涉及一些调用别人实现的库的函数,不是在自己程序中实现的。此外,静态库在重定位阶段,而动态库链接是在可执行文件装载到内存时,根据依赖关系进行重定位。
  1. 总之这一阶段,代码一直在库和自己的程序中做跳转。

观察如下编译过程:
有的链接到了/lib/.so中,而有的链接到了本地/.o目标对象中,这就是动态库和静态库,链接去了两个不同地方。比如printf肯定链接到动态库,而自己写的函数肯定链接到本地文件夹下的.o目标对象。
请添加图片描述

  • 动态库和静态库区别:
    静态库直接把代码拷贝进来,而动态库只有运行时才把库文件中代码加载到可执行文件中。简言之动态库运行时加载,静态库直接拷贝。后者先于前者,且生成可执行文件后,动态库才加载。

2. gcc

记住:ESC
-E:只激活预处理。生成.i文件。
-S:生成汇编语言。.生成S文件。
-C:把汇编生成机器语言,即目标文件, 生成.O文件。
-O:之前这些选项过程,都可以加-O,生成临时文件,直接gcc会一次性做4个步骤生成可执行文件。

  • g:生成可调试的代码文件,gdb需要这个。
    gcc test.c -o test生成的test默认是release程序,不可以调试
    gcc test.c -o test_debug -g可以生成的test_debug可以调试。

3.Linux下调试器:gdb

  • 使用过程:
  1. vim写个简单程序:
    请添加图片描述
    【经过 gcc编译 才能进入gdb,且这里要加-std=c99】
    -o 是生成中间文件,-g是生成可debug的文件。
    gcc mytest.c -o mytest -g -std=c99

  2. gdb进入调试器:gdb mytest进入gdb调试。

    1. list或l查看代码【显示的默认行数会根据可修改的默认设定】
      请添加图片描述
    2. 通过r运行:无BUG就显示:exited normally
      请添加图片描述
  3. b或break line:加断点,再用info b查断点
    info b 还会查看到集中了几次这个断点。请添加图片描述

  4. step或s:继续执行,F11逐语句
    请添加图片描述

  5. next或n:相当于F10逐过程

  6. 监视变量值:display
    会常自动显示出来某个变量。
    之后按S或N会自动显示这些变量。
    请添加图片描述

  7. 关闭监视:undisplay ,undisplay 变量名不可以
    请添加图片描述
    undisplay 行号,之后行4的i变量,就不会再在执行中显示了。

  8. 结束当前函数:finish

  9. continue或c:直接到达下一个断点。

  10. until +line:直接把结果运行到某一行。很好用

  11. d 断点编号 删断点

  12. disable 断点编号 暂时关闭

yum

yum - upgrade:升级所有包,不升级软件和系统内核。
yum - update:升级所有包同时也升级软件和系统内核。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值