Linux学习笔记2(工具章节)-------linux环境下代码的编辑、编译与调试

目录

一、包安装器:yum

1.什么是yum

2.yum三板斧

3.安装lrzsz或者xftp

二、编辑器:vim

1.常见的三种模式:

2.模式之间的切换

3.七字真言(正常模式下的快捷操作)

4.其他操作

三、编译器:gcc/g++

预处理:

编译:

汇编:

链接:

四、调试器:gdb(重要!!)

1.程序发布的两种方式:debug模式和release模式

 2.调试的基础方法:

3. 调试的应用场景:

4.自动化构建项目:make&makefile


一、包安装器:yum

1.什么是yum

yum 就是一个应用商店, 类似于华为商店, 苹果商店等等,里面有经过yum源认证的软件包。

如果程序员想要用哪软件包,可以使用yum搜索和安装。

由于是从yum源下载到本地进行安装 ,所以必须要有网络

2.yum三板斧

yum list : 查看yum都有哪些安装包(加上管道进行过滤)

例如 : yum list | grep “tree”

指令用法备注
yum install yum install [-y] [待要安装的软件包名称]安装某个软件包 
yum removeyum remove [待要删除的软件包名称]卸载某个软件包

3.安装lrzsz或者xftp

        lrzsz :可以支持文件的上传和下载

            rz :将win机器的文件上传到Linux操作系统

            sz :将Linux下的文件下载到win机器

        xftp :文件上传和下载的工具,和xshell是同源(工作中用的比较多)

二、编辑器:vim

1.常见的三种模式:

        1.1 正常模式:控制屏幕光标的移动,字符、字或者行的删除,移动复制某区段及进入Insert mode下,或者到 last line mode .

        1.2 插入模式:只有在Insert mode下,才可以做文字的输入,按[ESC]键可以回到正常模式。

        1.3 底行模式:文件保存或者退出,也可进行文件替换,找字符串,列出行号等操作。在命令行模式下,shift+:即可进入该模式。

2.模式之间的切换

3.七字真言(正常模式下的快捷操作)

        移删复替撤更跳

:(hjkl/上下左右键)

        按[w] :光标跳到下个字的开头[重要]

        按[b] :光标回到上个字的开头[重要]

        按[gg] :进入到文本的开始[重要]

        按[G] :移动到文章的最后[重要]

        按[$] :移动到光标所在行的“行尾”[重要]

        按[^] :移动到光标所在行的“行首”[重要]

        [x]:每按一次,删除光标所在位置的一个字符[重要]

        [#x]:例如,[6x]表示删除光标所在位置的“后面(包含自己在内)”6个字符

        [X] :大写的X,每按一次,删除光标所在位置的“前面”一个字符

        [#X] :例如,[20X]表示删除光标所在位置的前20个字符

        [dd] :删除光标所在行[重要]

        [#dd] :从光标所在行开始删除#行[重要]

        [yy] :复制光标所在行到缓存区。[重要]

        [#yy] :例如,[6yy]表示拷贝从光标所在的该行“往下数”6行文字

        [p] :将缓冲区内的字符粘贴到光标所在位置。位置:所有与“y”有关的复制命令都必须与“p”配合才能完成复制与粘贴功能。[重要 ]

        [r] :替换光标所在处的字符。

        [R] :替换光标所到之处的字符,直到按下[ESC]键为止。[重要]

        [u] :如果你误执行一个命令,可以马上按下[u],回到上一个操作。按多次“u”可执行多次回复。[重要]

        [ctrl + r] :撤销的恢复[重要]

        [cw] :更改光标所在处的字尾处

        [c#w] :例如,[c3w]表示更改3个字

        [#G] :例如,[15G],表示移动光标至文章的第15行首。

4.其他操作

        4.1:多行注释,多行去注释

        多行注释:

        (1)ctrl + v

        (2)选中需要注释的行,使用hjkl移动光标

        (3)shift + i :进入插入模式

        (4)输入注释符号

        (5)esc

        多行去注释:

        (1)ctrl + v

        (2)选中需要注释的行当中的注释字符,使用hjkl移动光标

        (3)x删除掉

        4.2替换

        单行首个目标字符串替换:

        s/[待替换的目标字符串]/[替换成为该字符串]/

        单行全部目标字符串的替换:

       s/[待替换的目标字符串]/[替换成为该字符串]/g

        全文替换:

        %s/[待替换的目标字符串]/[替换成为该字符串]/g

        指定行替换:

        (num1,num2)s/[待替换的目标字符串]/[替换成为该字符串]/g

        结论:

        g :表示替换当前行所有

        % :代表当前所有行

三、编译器:gcc/g++

1.gcc编译C,g++编译C++

2.编译的4个过程:预处理,编译,汇编,链接

预处理:

宏替换,头文件展开,删除注释,条件编译

gcc -E [source file] -o [xxxx].i

        选项“-E”,该选项的作用是让gcc在预处理结束后停止编译过程

        选项“-o”是指目标文件

        “.i”文件为已经过预处理的C原始程序。

编译:

将源文件生成为汇编代码

        例子:gcc -S test.c/test.i -o test.s

汇编:

将汇编代码转换为二进制代码

        例子:gcc -c test.c/test.i/test.s -o test.o

链接:

将若干个二进制代码(.o)或者库文件链接起来生成可执行程序或者库文件

        gcc test.c -o mytest

        mytest:就是可执行程序的名字

四、调试器:gdb(重要!!)

1.程序发布的两种方式:debug模式和release模式

        -g:命令行参数,给gcc/g++

 2.调试的基础方法:

gdb [binfile] 

指令作用
l [filename]查看某个函数的源码

r

程序执行起来
n 逐过程:F10(VS平台下)
s 逐语句:F11(VS平台下)
b [行号]打断点(行号是源代码中的行号)
i b 查看断点(info breakpoints)
c继续执行
delet breakpoints删除所有的断点
delet breakpoints n删除序号为n的断点
disable breakpoints禁用断点
enable breakpoints启用断点
infor locals查看当前帧局部变量的值
p [变量名]查看变量的值
bt展示调用堆栈,可以通过调用的堆栈来观察代码执行函数的调用关系
q推出
!gcc重复上一次执行的gcc编译命令

注意:1.一定要有一个可执行的程序

           2.编译debug版本的可执行程序(gcc/g++:-g)   

b [行号] 

例如:b 14 就是在源代码的14行打一个断点

i b:查看断点信息:

             

bt :展示调用堆栈

例如:交换变量的程序(main函数和Swap函数调用堆栈)

           

3. 调试的应用场景:

1.程序没有执行起来,调试可执行程序(重要的)

2.调试正在运行的程序(暂时不说)

        gdb attach pid

3.调试崩溃的程序产生的coredump文件

        3.0 coredump文件:核心转储文件,是程序在崩溃一瞬间内存的映像(相当于案发现场)

        3.1 ulimit -a

                core file size :决定产生的coredump文件最大能够多大

core file size :限制核心转储文件大小

0:程序崩溃也不会产生coredump文件

unlimited:不限制核心转储文件的大小(理论上,不管coredump文件多大,都会产生)

[硬盘大小来决定

1.如果产生的coredump文件的大小,小于空闲的磁盘空间数量,正常产生

2.如果产生的coredump文件的大小,大于空闲磁盘的大小,即使core file size的值是unlimited,那也不会生成coredump文件(原因是因为磁盘的空间不足)]

         3.2调试命令

                gdb 可执行程序 cordump文件

 

如果说我们想要通过gdb + coredump方式调试,可执行程序也应该是debug版本,非常重要

4.自动化构建项目:make&makefile

       4.1 make是一个命令

             makefile是一个文件

             make根据makefile的文件内容,进行解析,编译程序(构建项目),从而生成可执行程序。

        4.2makefile文件格式

        目标对象:依赖对象(生成目标对象时依赖的源码文件/目标文件)

                编译命令(如何通过依赖对象生成目标对象)

        4.3make的工作方式

           1.只为生成第一个目标对象而服务,

               如果生成了目标对象则后续文件当中的内容不解析

               如果为了生成第一个目标对象,需要先生成依赖的对象,则在makefile文件当中查                    找生成依赖对象的方法。

               如果发现依赖对象不存在,则报错返回。

           2.若依赖对象的最后一次修改时间小于目标对象的最后一次修改时间,则不生产。

               make默认在当前路径下寻找文件名为“makefile”或者“Makefile”的文件来进行解析,如果           找不到,则报错。

        4.4makefile文件当中的自定义变量和内置变量

                内置变量:

                $^:所有依赖的对象

                $@:目标对象

                $<:代表第一个依赖的对象

                自定义变量:可以自己给变量起名字,后续使用$符号进行解析

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值