栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

从虚拟机到Ubuntu,再到vi,gcc,gdb和makefile的学习

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

从虚拟机到Ubuntu,再到vi,gcc,gdb和makefile的学习

第一次跟着老师做项目,老师布置了几个学习任务,这么好的学习笔记,我私吞了多不好,于是又来分享学习笔记啦!

初次接触虚拟机,Linux内核的Ubuntu系统

虚拟机当然是为了模拟Ubuntu系统,用Ubuntu是因为它基于Linux内核,而用Linux内核的优势是支持的体系结构多,也就是移植性强,应用广泛。用来开发代码的自由度高,开发工具丰富。

vi是Ubuntu里的一种文本编辑器,优点是页面及其简洁,跟命令行界面差不多简洁,而且光标移动能力十分强大,另外,操作熟悉的话复制,删除代码也超级方便。

gcc是编译.c文件的编译工具,带有多种功能。

gdb是调试工具,也有非常强大的功能哦。

之后这个makefile了解到是用来同时编译多个代码文本的工具,至于其他的,下边再说。

下面就说说我学习过程遇到的问题跟思考:
       虚拟机和Ubuntu都是在官网找的,主要是在b站跟csdn找怎么安装,遇到一个bug,安装.ubuntu的时候界面显示不全,然后安装不了,最后是按tab键盲猜下边的继续键在哪里才安装好,不过最好也找到了按window键再拖动鼠标能解决,才算真的解决了这个问题。

        特别提醒:记得安装vmware tools哦,能在电脑全屏使用虚拟机,另外还能在虚拟机和主机之间传输文件。

vi

vi我是先看了几个csdn上边的文章,在Ubuntu上边安装vi之后照着一篇文章试了一下,很多功能跟文章讲的不一样,比如ctrl+u ctrl+d说反了,b的作用说错了,还有一些里边有介绍我操作不了的。Vi上边几乎每个按键都有用,而且很多重复的,总的来说要熟练掌握四种操作:
  1. 移动光标
  2. 删除
  3. 复制粘贴
  4. 转插入
  5. 撤销与反撤销
  6. 末行模式

  1. 移动光标:
  1. h j k l为上下左右(直接方向键也可)
  2. H M G是整篇文档的最开头,最中间跟结尾
  3. CTRL+ b / u / f / d 分别表示向上一页,向上半页(后两个为向下)
  4. Shift+$/^ 表示当行最后/最前
  5. w e表示下一行行首与下一行行末,b表示上一行行末

  1. 删除:
  1. dd表示删除该行 ndd表示向下删除n行
  2. x/X表示删除删除一个字符,nx/nX表示向后/向前删除n个字符

  1. 复制粘贴:
  1. 小写v按字符选择,大写V按行选择,CTRL+V按模块选择,再用上边移动光标的方法选定后,y复制,p粘贴。
  2. 用鼠标选定后,y复制,p粘贴
  3. yw(复制一个字符)  yy(复制一行)yG(复制至文末)

  1. 转插入:
  1. 有a ,I(小写) ,o,O(表示向下/向上插入一行)
  2. s/r表示下一个输入替换,且进入插入模式,R会一直替换输入,直到按下esc键。

  1. 撤销与反撤销:
  1. u撤销一次,n+u撤销n次,ctrl+r反撤销

  1. 末行模式:
    1. 在命令行模式按下 : 进入末行模式
    2. w保存 q退出 wq保存并退出 q!强制退出
  1.  “/+搜索的内容” 或“?+搜索的内容” 都能搜索
  2. set number & set nonumber 表示显示行号与取消显示行号
  3. %s/要替换的字符/替换后的字符/g   能替换文本,如: 

%s/s1/s2/g  //g表示在全局文件替换,即一次更换文件所有要替换的地方,
换成 /c 则表示每次替换之前让用户替换。

GCC

基本模式是 gcc test.c -o test

         这其中省略了几个过程,包括预处理(-E),编译(-S),汇编(-c),链接(-o),这是直接一步到位,但是因为这样写,在makefile的时候出了问题。

除了这个基本模式,还能添加各种指令,最常见的是-g添加调试指令。 -Wall能尽可能多的提供警告。 -Werror能将警告当作error处理,在遇到警告时停止编译。-On 是编译方式,n为等级,可以取0~3的整数,-O2最常用,不过可能会改变代码,所以调试的时候别用。

GDB

基本模式是 gdb test (-q)

              要执行这个之前要先用gcc添加调试信号。

       进入gdb后有很多命令:

  1. 断点
  2. 变量
  3. 执行

  1. 断点:
    1. break(b)+location设置断点,location可以是
      1. 行数
      2. 文件名:行数 表示哪个文件的第n行
      3. 函数名
      4. 文件名:函数名 会在函数的开头设置断点
      5. “+ n ”/“- n ”在当前暂停位置向后/向前n行设置断点
      6. 条件断点:break location if cond
    2. tbreak 设置断点只会存在一次
    3. delete(d) + (n)加n表示删除第n行断点,不加n删除所有断点
    4. clear +location 删除该位置的断点
    5. info breakpoints 查看断点信息
    6. disable n1 n2 ... & enable n1 n2 ...表示禁用跟恢复第n行断点,其中n可以有多个

  1. 变量:
    1. print (p) 能打印某个变量或表达式的值(一次)
    2. display 打印某个变量或表达式的值(每次暂停时都会打印)undispaly解除
    3. watch 变量/表达式  能够跟踪某个变量或者表达式,下次这个变量(或表达式)的值改变时会停下并显示含量(表达式)的值
  2. 执行:
    1. run(r)/start开始运行
    2. continue(c)在暂停时继续执行
    3. step(s) & next(n) 单步运行代码,区别是step会进入函数next不会
    4. until 每篇文章都说它能快进至结束循环(在循环最后一行时),但是我自己试是不可以的,可以用设置断点跟continue代替。另外until n是执行到第n行,也可以解决上边的问题。
    5. return 在其他函数里边跟踪的时候,return能立刻停止函数并返回当前函数值
    6. finish(不能简写成f!)能正常执行至函数结束(不可用于最外层函数)
    7. jump +location 直接跳到某位置继续执行代码

Makefile

     先是看了一波视频,顺便学了一点脚本语言,自己写makefile和基本用法还是没问题的。

         一个makefile里边大概分为三个部分:

  1. 变量设置
  2. 编译依赖文件成目标文件
  3. 定义其他指令

  1. 变量设置:
  1. = 的意思就是定义
  2. +=追加定义
  3. 在此部分
    1. 定义一个变量 OBJ为.o文件的总称 (便于修改)
    2. 定义CC=gcc (这是考虑到有的操作系统不是用gcc编译,移植后修改此处即可)
    3. 定义目标文件 TAG
  1. 编译     
    1. 这个就是将gcc的编译放进来 略有不同,例如

目标文件:依赖文件

(tab)gcc -g test.c -o test

              2. 如果直接用1的语句编译,用gdb并不能调试,会显示没有调试信号,于是要改为两部完成: 从.c文件到.o文件,再从.o文件链接成可执行文件,如:

目标文件:依赖文件

(tab)gcc -g test.o -o test

%.o:%.c

(tab) gcc -g test.c -o test.o

                之后再用各种替换,如通识符$^替换所有依赖文件 $@替换所有目标文件 以及上边定义的变量都换进去

  1. 定义其他指令:
    1. 顶格输入“.PHONY:”
    2. 再换行输入指令的名称加”:”,如“clear:”
    3. (tab)指令
    4. 删除指令为” rm -rf 文件”
  2. 多文件一起编译:
    1. 这个就是模块化代码后,在上边编译部分修改变量OBJ就好啦

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/422444.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号