• Linux:工具(vim,gcc/g++,make/Makefile,yum,git,gdb)


    目录

    ---工具功能

    1. vim

    1.1 vim的模式

    1.2 vim常见指令

    2. gcc/g++

    2.1 预备知识

    2.2 gcc的使用

    3.make,Makefile

    make.Makefile的使用

    4.yum

    --yum三板斧

    5.git

    --git三板斧

    --Linux下提交代码到远程仓库

    6.gdb

    6.1 gdb的常用指令


    学习目标:

    1.知道这些工具的功能

    2.掌握这些工具的基本使用

    ---工具功能

    编写代码         -- vim

    编译代码         -- gcc ,g++

    调试代码         -- gdb

    代码管理         -- git

    运行/自动化构建程序 --make/Makefile

    1. vim

    1.1 vim的模式

    1.命令行模式  2.编辑模式   3.低行模式

    1.2 vim常见指令

    --默认打开

    1.命令模式(默认打开的模式)

    --输出 i 即可写代码 (编辑/插入模式)

    --回到命令模式:按Esc

    --退出:在命令模式当中输出shift + :

    -w 保存 -q 退出 -wq 保存并退出 -!强制

    --命令行模式指令

    --编辑

    • yy:将当前光标所在的行,复制                  nyy(n表示具体的数字)
    • p:将复制行进行粘贴                                  np
    • dd:将当前光标所在的行,剪切(删除)   ndd(删除/剪切n行)
    • u:撤销历史操作
    • ctrl + r :撤销u操作
    • shift + ~ :大小写切换
    • shift + r:替换(进入替换模式)
    • r:替换光标所在的字符,支持nr
    • x or X(shift + x):删除光标所在的字符,包括之前或者之后 支持nx

    --光标移动

    • gg:光标定位到文件的最开始
    • shift + g :光标定位到文件的结尾
    • n + shift + g :光标定位到文件的任意行
    • shift + 6(^):光标定位到当前行的最开始(上)
    • shift + 4 ($):光标定位到当前行的最结尾(下)
    • w,b:以单词为单位进行光标的前后移动(左右)
    • h左,j下,k上,l 右

    --底行模式

    • set nu/nonu :调出行号,或者取消行号
    • vs 文件名 :分批操作
    • w:写入,w!(强制)
    • q:退出, q!(强制)
    • ctrl + ww :光标跳转
    • !  +  cmd:不退出vim执行对应的指令(执行命令,编译,运行,查看man手册)

    示例:

    --set nu/nonu :调出行号,或者取消行号

    set nu/nonu   显示/取消行号
    

    --vs 文件名 :分批操作

    vs  +  文件名     分批操作

    --ctrl + ww :光标跳转

    ctrl + ww    //光标跳转

    -- !  +  cmd:不退出vim执行对应的指令

    ! man 3 printf

    2. gcc/g++

    2.1 预备知识

    gcc是一个专门编译链接C语言的编译器 g++(C++)

    一、程序翻译过程:

    文本的C -->计算机二进制

    • 1.预处理:(a.去注释 b.宏替换 c.头文件展开 d.条件编译)
    • 2.编译(C ->汇编)
    • 3.汇编(汇编 -> 可重定向二进制目标文件)
    • 4.链接(链接 -> 多个.o ,.. ,.obj ->合并成一个可执行).exe

    (gcc/g++ 也要遵守)


    二、动静态库 --- (感性的认识)

    • 动态链接:将库中我要的方法地址,填入到我们的可执行程序中,建立关联(节省资源)
    • 静态链接:将库中方法的实现,拷贝到我们的可执行程序中

    一般链接的过程,两种方式:

    a.动态链接         -         需要动态库

    b.静态链接         -         需要静态库

    Linux: .so(动态库) .a(静态库)

    windows: .dll(动态库) .lib(静态库)

    注:gcc和g++默认形成的可执行程序是动态链接的

    2.2 gcc的使用

    gcc 文件名 -o 新生成的文件名

    其它选项:

    • gcc -E mytest.c -o mytest.i (预处理)开始翻译直到预处理完成
    • gcc -S mytest.i -o mytest.s (编译)开始翻译直到编译完成
    • gcc -c mytest.s -o mytest.o (汇编)开始翻译直到汇编完成
    • gcc mytest.o -o mytest.o (链接)  (mytest.o 可重定向目标文件)

    示例:

    gcc test2.c -o test2

    3.make,Makefile

    make.Makefile的使用

    1.make && makefile

    make是一个命令

    makefile是一个文件

    --使用

    touch Makefile         建立Makefile文件

    vim Makefile             编写Makefile(a.依赖关系 b.依赖方法)

    1. mytest:test.c (依赖关系)
    2. gcc test.c -o mytest (依赖方法)
    3. .PHONY:clean(伪目标)
    4. clean:
    5. rm -f mytest

    调用:

    1. make (构建)
    2. make clean (清理)

    makefile指令是从上到下扫描的

    注:clean 总是被执行的:总是会根据依赖放关系,执行依赖方法

    --在上面的例子里,可以重复执行clean,但不能重复执行mytest(没被.PHONY修饰)

            --你在Makefile中定义一个目标,与当前目录中存在同名的文件时,Make会默认认为这个目标是一个文件,并尝试根据文件的时间戳来判断是否需要重新构建。

    提问:makefile是如何知道我的文件是最新的?

    --根据最新的修改时间

    示例:

    1.创建Makefile

    touch Makefile

    2.编写Makefile

    vim Makefile

    3.调用:根据写好的Makefile自动生成可执行文件,并进行清理:

    make     //构建

    make clean  //清理

    --可以重复执行make clean(其被.PHONY修饰)

    通过使用.PHONY,告诉Make,这个目标是伪目标,不要期望生成一个同名文件,只需执行其中定义的命令。

    4.yum

    --yum三板斧

    1.yum list 列出能下的软件

    --yum list | grep sl (将所有包含sl文件的名称显示出来)

    2.yum install

    -- sudo yum install -y                 安装软件(-y表示默认认可,不需要再问用户)

    3. yum. remove 你的软件         移除软件(一般要加sudo)

    5.git

    --说明

    git用于管理代码,git的精华:多人协作开发,(学习阶段,大多数自己写代码,暂不涉及

    下面说明怎么使用git提交代码到自己的远程仓库

    --git三板斧

    正常情况:

    • git add 你的文件 #添加我们的代码到本地仓库
    • git commit -m "这里必须写提交日志"
    • git push

    其它情况:

    • 1.git log #查看提交记录
    • 2.git pull #同步仓库
    • 3.git rm 文件 #删除本地仓库的文件

    删除本地仓库文件后,再git commit -m " 日志" git push

    远程仓库里的文件会被删除

    --.gitignore # 不想提交某些后缀的文件同步到远端的git仓库,就可以添加到.gitignore

    修改本地仓库文件后,再add,commit,push就能将远程仓库的文件修改

    --若出现提交失败,可能是仓库未同步,git pull再提交

    --Linux下提交代码到远程仓库

    配置环境:

    第一次提交需要输入下面的指令:

    1. git config --global user.email "you@example.com"
    2. git config --global user.name "Your Name"

    这两个自行输入即可(这个是用来说明你是谁的,git支持多人协作,查看日志的时候可以看到是谁提交的代码)

    在克隆仓库/提交代码的时候,应该会让你输入你gitee的账号名和密码(根据它的提升输入即可)

    1.在Linux环境下输入:git clone 仓库网址

    这里可以看到就把仓库克隆过来了

    git仓库就是.git 文件

    2.使用三板斧提交写好的文件就行:

    1. git add test.c
    2. git commit -m "提交测试"
    3. git push

    这里push后要求输入gitee的用户名和密码

    然后就把写好的文件提交到远程仓库了

    6.gdb

    6.1 gdb的常用指令

    gdb 文件名 (调试)

    •  l 0                                  --从第0行开始显示代码
    • r                                      --开始调试,如果没有设置断点,就直接运行结束
    • b 行数                             --打断点 (会形成断点编号,可用info查看)
    • info b                               --查看断点
    • d 断点编号                      --删断点
    • disable 断点编号            --使能(打开)
    • enable 断点编号             -- 关闭
    • p 变量名                          --打印变量内容:
    • n                                      --逐过程 (相当于vs中的F10)
    • s                                      --进入函数(相当于vs中的F11)
    • bt                                     --查看当前调用的堆栈
    • finish                                --函数跑完就停下
    • display 名称                     --设置常显示
    • undisplay 编号                 --取消常显示
    • until 行数 (不建议)      --跳到指定行数
    • c                                      --运行到下一个断点出就停下来
    • quit                                  --退出

    补充:

    --gdb会记录最近一条命令,如果命令无变化,可以直接回车

    修改特定变量:set var 变量 = 数值(vs中监视窗口,可以给变量赋值查看)

    示例:

    因为gcc,g++默认形成的可执行程序式release的,所以无法直接调试

    解决:使用gcc编译的时候,添加-g 选项,将其改为debug方式发布

    我写了一个打印1-100的和的文件,现在对其调试

    先编译,生成debug版本的运行文件

    1. gcc test.c -o test -g //生成Debug版
    2. gdb test

    -- l  0 (从第0行开始显示代码)

    --打断点: b 行数

    --查看断点 info b

    --删断点 d 断点编号

    --打印变量内容: p 变量名

    --逐过程 n (相当于vs中的F10)

    --进入函数 s (相当于vs中的F11)

    --查看当前调用的堆栈 bt

    --函数跑完就停下 finish

    --设置常显示 display 名称

    --取消常显示 undisplay 编号

    --运行到下一个断点出就停下来 c

    这里我打了两个断点:(17,19行)

    使用c后直接跳转到下一个断点19

    补充:

    gcc和g++默认形成的可执行程序是动态链接的

    gcc,g++默认形成的可执行程序式release的,所以无法直接调试

  • 相关阅读:
    Python常见设计模式库之python-patterns使用详解
    贪心算法--装箱问题
    redis(其它操作、管道)、django中使用redis(通用方案、 第三方模块)、django缓存、celery介绍(celery的快速使用)
    Oracle + MyBatis 批量更新 update
    二十一、动态内存管理
    聚观早报 | 多款热门游戏停服一天;比亚迪下月在日本开售
    初始化成员列表
    深入理解 Happens-Before 原则
    五分钟看完,彻底理解协变逆变
    Springboot 手动分页查询,分批批量插入数据
  • 原文地址:https://blog.csdn.net/m0_70402487/article/details/132673663