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

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

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

那么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. Tunnelblick 覆盖安装失败

    公司搬家, jira, sourceTree都链接不上了,发现是VPN断了的原因,需要重新链接VPN Tunnelblick坏掉了,覆盖安装总是提示安装失败,安装超时 nil,搜索一大堆文章, 看了这 ...

  2. linux 安装libevent

    今天再ubuntu下安装libevent,下载源码 tar -xzvf libevent-1.4.15.tar.gz cd libevent-1.4.15 ./configure make make ...

  3. Python常用模块(logging&re&时间&random&os&sys&shutil&序列化&configparser&&hashlib)

    一. logging(日志模块) 二 .re模块 三. 时间模块 四. random模块 五. os模块 六. sys模块 七. shutil模块 八. 序列化模块(json&pickle&a ...

  4. (10)场景转换(Transitions)

    Cocos2d-x最爽的一个特性之一就是提供了在两个不同场景之间直接转换的能力.例如:淡入淡出,放大缩小,旋转,跳动等.从技术上来说,一个场景转换就是在展示并控制一个新场景之前执行一个转换效果. 场景 ...

  5. 6.MySQL必知必会之数据过滤-WHERE组合子句

    数据过滤-WHERE组合子句 本章讲授如何组合WHERE子句以建立功能更强的更高级的搜索条件. 我们还将学习如何使用NOT和IN操作符. 1.组合WHERE子句 上一章介绍的WHERE子句在过滤数据时 ...

  6. VS2010/MFC编程入门之十三(对话框:属性页对话框及相关类的介绍)

    前面讲了模态对话框和非模态对话框,本节开始鸡啄米讲一种特殊的对话框--属性页对话框.另外,本套教程所讲大部分对VC++各个版本均可适用或者稍作修改即可,但考虑到终究还是基于VS2010版本的,所以将& ...

  7. VS2010/MFC编程入门之八(对话框:创建对话框类和添加控件变量)

    前两讲中鸡啄米为大家讲解了如何创建对话框资源.创建好对话框资源后要做的就是生成对话框类了.鸡啄米再声明下,生成对话框类主要包括新建对话框类.添加控件变量和控件的消息处理函数等. 因为鸡啄米给大家的例程 ...

  8. python中format函数

    python中format函数用于字符串的格式化 通过关键字 1 print('{名字}今天{动作}'.format(名字='陈某某',动作='拍视频'))#通过关键字 2 grade = {'nam ...

  9. 微信JS支付代码_前端调用微信支付接口

    转自:http://dditblog.com/itshare_553.html 跟大家分享一段微信支付的js代码片段.V3版的微信支付没有paySignKey参数.基本上是直接复制就可以使用了.改一改 ...

  10. Linux内核参数之arp_ignore和arp_announce

    一.arp_ignore和arp_announce介绍 arp_ignore和arp_announce参数都和ARP协议相关,主要用于控制系统返回arp响应和发送arp请求时的动作.这两个参数很重要, ...