我们都知道,一个可执行程序的基本的生命过程是如此的:

(编辑)源文件--->(编译)目标文件--->(链接)可执行文件--->(调试排错)稳定执行

所以,在这个过程中,我们很容易看得出。一个程序开发过程是离不开,编辑器,编译器,调试器这三个工具的。

那么vim,gcc(g++),gdb就是linux环境C/C++编程三把尖刀,没有他们的存在,江湖总是太过平静了。

修习之剑vim

vim模式:

基本分类

①插入模式(可编辑,输入字符状态),②命令模式(底行模式),③视图模式(v进入,可选定字符)

详细分化

1.通常模式(n) 在其它任何一个模式下,用ESC或者 ctrl+c 键可以退到通常模式
2.插入模式(i) 在这个模式下,vim像一个常见的编辑器.在通常模式下,用i或者a可以进行本模式,当然,还有一些其它命令也可以.
3.可视模式(v) 在这个模式下,可以使用hjkl进行选择.然后进行copy,paste或者其它操作. 在通常模式下,用v命令进行可视模式.
4.块操作模式(V) 这是块操作模式. 在通常模式下,用ctrl+v进入本模式.
5.修改模式(R) 这是改写的模式.很多软件法用insert键来完成这个切换.在vim中,从通常模式用R即可进入改写模式.
6.扩展命令模式(ex) 这是命令执行模式 在通常模式下用:切换到此模式

模式切换:

模式下操作

普通模式下:

跳转

  到行末   $

  到行首   ^

  到文件开始  gg

  到文件最后  G

  到第n行  nG

  ---以字符/行为单位跳转

  光标移动 方向  h左  j下  k上   l右

  ---以单词为单位跳转

  上一个单词b   下一个单词w    本单词末尾e

删除

  删除光标下字符:向后x(同插入模式下的del键)   向前X(同插入模式下的Backspace键)

  向前或者向后删除一个字符也可以:   按d   按左右键

  向前或者向后删除两行:按d  按上下键

  删除光标所在行dd

  删除光标所在单词dw

  删除多行或者多个单词  ndd          ndw

  替换单个字符(将源字符替换为x) rx

  将光标所在字符大小写转换   ~

复制粘贴

  复制行   yy

  复制单词  yw(不忽略空格,连续空格算做一个单词)

  复制n个单词、行:nyy   nyw

  粘贴pp  多次粘贴npp

替换模式操作:

  普通模式输入R进入之后操作(同插入模式下ins键)

视图模式操作:

  普通模式按v进入

  eg删除3个字符

  ①进入v模式,方向选取3个字符

  ②按x或者d删除之

  eg 替换几个字符为sss

  ①可视模式选取字符

  ②按r 按s   就将选定的字符都换位s字符了

命令模式:

  ①:进入命令模式

  ②输入命令

  ③按下enter执行操作

主要命令有:

  环境设置eg 

  set number 显示行号

  set nonnumber 取消显示行号

  set tabstop=2 设置tab键等价空格数

  set shifwidth=2设置缩进为2个空格

  更多设置请在命令模式下输入:help去学习

ps:将更多合适的 环境设置聚合在配置文件.vimrc中保持vim编辑器个性化

块模式下操作:

  最常用用法-->>注释一段代码

  ps,当我们不熟悉块操作之时,要注释一段代码,貌似只能在插入模式下一行一行的插入//

这么做,很是低效费事。

  块模式注释一段代码:

  ①按CTRL+V进入块模式

  ②方向键选取需要注释的行数

  

  ③按下I进入插入模式

  ④输入//

  

  ⑤按esc退出

  

  至此,注释完成,ps模块模式的做法是,对应选取的块,以行为单位,每个行都按格式进行操作

  取消注释:

  进入块模式后,用x或者d删除一行中的字符,按esc退出。这里就不上图了

锻造之剑gcc/g++

①man了解基本选项

  解释:

  -E 预处理过程,得到.i文件,保存宏替换,条件编译处理之后的文件

  

  -S 编译过程,获得汇编代码.s

  

  -c获取目标文件

  -o获取输出文件,一般用于指定可执行文件。(中间生成文件也可以使用之指定filename)

  一个命令获取以上过程文件

  gcc test.c   -save-temps

  

  注:gcc、g++默认是动态链接的,

  指定为静态链接的参数  -static

  

更多选项(相关问题请参考linux环境编程相关章节)

  生成静态链接库

  ar -rcs test.a test.o

使用静态链接库

  gcc -o test main.c libstr.a

  或者 “-l 库名”

  gcc -o test main.c -lstr

  指定静态库路径

  gcc -o test main.c -L ./ -lstr

生成动态库

  gcc -shared -Wl, -soname,libstr.so -o libstr.so.l string.c

  //-soname,libstr.so 表示生成动态库别名为libstr.so

  //-o libstr.so.l 实际动态链接库文件

  //-shared 表示生成的是一个动态链接文库

  配置文件 /etc/ld.so.conf

  

  ldconfig -g显示动态链接库列表(缓存文件中的)

  ldconfig 目录名   将该目录中动态链接库放入系统缓存文件/etc/ld.so.cache

    使用(同静态链接库的使用)

  gcc -o test main.c -L ./ -lstr

锤炼之剑gdb

最后我们来看看gdb的使用了

基本功能

  ①设置断点b

  ②显示变量print

  ③单步执行 s(f11) n(f10) u(shift+f11)

  ④运行时修改变量值

  ⑤路径跟踪,堆栈调用展开bt

  

  ⑥线程切换

  info thread 获取线程信息

  thread id 进入调试线程

简单使用步骤

  ①编译程序加入选项-g

    gcc test.c -g

  ②调试可执行程序

    gdb a.out

  进入之后

  当程序需要命令行参数时

  ③(可选)set args 参数值1 参数值2  参数值3

  ④显示源代码l  (list 简写)

  ⑤断点设置b main(breakpointer简写)可以设置断点在行号,函数名,条件设置等

    eg  b  36 if i==2    当i==2时断点

  ⑥执行 r (run)执行到断点处停止

  打印变量p  value    (print value)

  监视变量display value (每次enter都会打印)

  其他命令

  断点失效:

  enable b  编号

  

  i  打印信息

  info显示   eg

    info   b  显示断点信息

  file path   加载文件

  变量类型检测 whatis value

  

  最后说一个命令,也就是上图中的调试过程中显示的代码框架

  refresh

  最后,关于linux下的makefile下次再解

linux三尖刀的更多相关文章

  1. Linux 驱动开发

    linux驱动开发总结(一) 基础性总结 1, linux驱动一般分为3大类: * 字符设备 * 块设备 * 网络设备 2, 开发环境构建: * 交叉工具链构建 * NFS和tftp服务器安装 3, ...

  2. Linux 内核概述 - Linux Kernel

    Linux 内核学习笔记整理. Unix unix 已有40历史,但计算机科学家仍认为其是现存操作系统中最大和最优秀的系统,它已成为一种传奇的存在,历经时间的考验却依然声名不坠. 1973 年,在用 ...

  3. 死磕内存篇 --- JAVA进程和linux内存间的大小关系

    运行个JAVA 用sleep去hold住 package org.hjb.test; public class TestOnly { public static void main(String[] ...

  4. NodeJs在Linux下使用的各种问题

    环境:ubuntu16.04 ubuntu中安装NodeJs 通过apt-get命令安装后发现只能使用nodejs,而没有node命令 如果想避免这种情况请看下面连接的这种安装方式: 拓展见:Linu ...

  5. [linux]阿里云主机的免登陆安全SSH配置与思考

    公司服务器使用的第三方云端服务,即阿里云,而本地需要经常去登录到服务器做相应的配置工作,鉴于此,每次登录都要使用密码是比较烦躁的,本着极速思想,我们需要配置我们的免登陆. 一 理论概述 SSH介绍 S ...

  6. Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part3:db安装和升级

    Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part3:db安装和升级 环境:OEL 5.7 + Oracle 10.2.0.5 RAC 5.安装Database软件 5. ...

  7. Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part1:准备工作

    Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part1:准备工作 环境:OEL 5.7 + Oracle 10.2.0.5 RAC 1.实施前准备工作 1.1 服务器安装操 ...

  8. SQL Server on Linux 理由浅析

    SQL Server on Linux 理由浅析 今天的爆炸性新闻<SQL Server on Linux>基本上在各大科技媒体上刷屏了 大家看到这个新闻都觉得非常震精,而美股,今天微软开 ...

  9. Microsoft Loves Linux

    微软新任CEO纳德拉提出的“Microsoft Loves Linux”,并且微软宣布.NET框架的开源,近期Microsoft不但宣布了Linux平台的SQL Server,还宣布了Microsof ...

随机推荐

  1. Oracle Schema Objects——伪列ROWID Pseudocolumn(ROWNUM、ROWID)

    Oracle Schema Objects Oracle Schema Objects——Tables——Oracle Data Types Oracle伪列 在Oracle数据库之中为了实现完整的关 ...

  2. has to be escaped using backslash to be included in string value\n

    [root@d myssh]# cat ESdel_bulk_file1544528090.log{"error":{"root_cause":[{" ...

  3. Romantic---hdu2669(扩展欧几里德模板)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2669 详解:扩展欧几里德 #include <iostream> #include < ...

  4. 经验搜索排名---google已经做过类似的了(我想多了)

    由于编程的原因,我们需要经常的查资料,现在转载的文章比较多,我们经常看到的搜索结果的前十名基本上有7名是转载的.这样看起来很没有效率,后来突然想到,如果把大家的浏览结果搜集起来,然后进行权重排名,这样 ...

  5. 在线学习--online learning

    在线学习 online learning Online learning并不是一种模型,而是模型的训练方法.能够根据线上反馈数据,实时快速的进行模型调优,使得模型能够及时反映线上的变化,提高线上预测的 ...

  6. HTML格式布局

    一.position:fixed 锁定位置(相对于浏览器的位置),例如有些网站的右下角的弹出窗口. #top { border:1px solid #; height:100px; width:966 ...

  7. Python Missing parentheses in call to 'print'

    原来是因为Python2.X和Python3.X不兼容. 我安装的是Python3.X,但是我试图运行的却是Python2.X 的代码. 所以上面的语法在python3中是错误的.在python3中, ...

  8. SQL: 拼接列

    1. 因工作需要,需把两列(id,created_by)拼接成一列,结果很有意思,前5个值都是null. 2.解决方法:null加减乘除任何值都等于null,所以使用isnull函数先处理下列的值再拼 ...

  9. C++虚函数分析

    1.虚函数(impure virtual) c++虚函数主要是提供“运行时多态”,父类提供虚函数的默认实现,子类可以虚函数进行重写. 2.纯虚函数(pure virtual)       c++纯虚函 ...

  10. Vue学习笔记之Nodejs入门

    0x00 前言 打开Nodejs英文网:https://nodejs.org/en/ 中文网:http://nodejs.cn/ 我们会发现这样一句话: 翻译成中文如下: Node.js 是一个基于 ...