vim和gcc和gdb基础认识

109 阅读3分钟

vim

  • vim 就是一款编辑器,只负责写代码
    • vim是一款多模式的编辑器
    • 命令模式(默认)
      • 可以进行很多编辑操作
      • 光标定位 n+shift+g
      • shift+g定位文本结尾
      • gg定位文本开始
      • w ,b前进,后退
      • h ,j,k,l:左下上右
      • yy+p光标所在行进行复制粘贴,默认粘贴到下一行。
      • x 删除光标位置的字符
      • n + dd剪切,删除(批量化)
      • shift+~:大小写改变
      • vsp+文件名
      • ctrl+w+o关闭一个分屏
      • 多屏幕 ctrl+ww:实现两个光标的切换
    • 插入模式
    • 低行模式
      • wq保存退出
      • vs文件新建或打开
      • !gcc test.c :不退出编译程序
  • gcc就是一款编译器,只负责程序的翻译
  • gdb就是一款调试器,只负责程序的调试

c语言到执行的编译过程

  • 程序的翻译过程

    • 预编译
      • 头文件展开,去注释,宏替换,条件编译
      • gcc-E main.c -o main.i
      • 做完预编译停下来,并且保存在main.i中
      • 预处理阶段还是c语言
      • 预处理阶段,宏替换
      • 预处理阶段,去注释
      • 预处理阶段,把你所依赖的所有头文件,给展开,把头文件包含的内容拷贝进源文件来
    • 编译
      • gcc -S main.i -o main.s
      • 走完编译就停下来,临时文件写入main.s
      • 把C语言编译成汇编语言
    • 汇编
      • gcc -c main.s -o main.o
      • 一般的.o文件叫做目标文件
      • 走完汇编停下在,把汇编语言,翻译成目标二进制,不可以执行
      • 只是相当于把我自己写的代码编译成二进制,但是里面用的函数不是自己写的例如:printf();所以需要链接。
    • 链接
      • 本质引入我们在代码中使用的第三方库,c库
      • gcc会根据文件,进行默认链接,c库等
  • ESc 无脑 -o

  • iso #centos.xxx.iso,镜像文件

Linux项目自动化构建工具 make/makefile

  • make:它是一条命令
  • makefile:一个文件

dd3.png

dd4.png

linux 调试器-gdb使用

1.背景

  • 程序的发布方式有两种,debug模式和release模式

  • linux gcc/g++出来的二进制程序,默认是release模式发布的,不可以被调试的。

    • 开发模式:debug,是包含调试信息
    • release:一般软件进行发布,并交付给用户的模式
    • debug生成的程序,体积上一定是大于release
  • 要使用gdb调试,必须在源代码生成二进制程序的时候加上 -g选项【重要】

  • gdb main 进入gdb直接调试

  • 修改gcc ,为debug 在gcc 最后添加 -g

调试,究竟在干什么??

  1. 发现问题(人)
  2. 定位问题(gdb)
    • 找到问题所在行,或者区域
  3. 分析问题(gdb辅助)
  4. 解决问题(人)
  5. ... ...
  • 进入gdb调试, list 查看调试代码
  • 打断点 b + 行号
  • 然后 run 起来,到断点处停止运行。(如果没有断点直接运行程序到结束)。
  • 单步执行的命令 next 不关心函数细节,不会进入导函数里面
  • info b 查看断点的位置
  • 删除断点 delete Num (删除所在编号)
  • s:按照语句执行,进入函数
  • display i :常显示 i ,也可以&i,next 向后执行
  • undisplay 编号 :删除监视
  • until 行号:如果陷入循环,可以指定跳往第几行
  • finish:结束函数调用,然后停下。
  • c :运行至下一个断点处。