在Linux下我们有一些非常好用的工具,他们可以显著的提升我们的效率,这篇将介绍这些工具,来帮助我们完成Linux编程操作。
作为初期,我们只需要学习vim三种模式就可以了:
分别是 命令模式(command mode)、插入模式(Insert mode)和底行模式(last line mode)
命令模式(command mode): 控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode下,或者到 last line mode
插入模式(Insert mode): 只有在Insert mode下,才可以做文字输入,[ESC]键可回到命令行模式。该模式是我们后面用的最频繁的编辑模式。
末行模式(last line mode): 文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作。 在命令模式下,shift + : 即可进入该模式。
命令模式切换至插入模式
输入a
输入i
输入o
插入模式切换至命令模式
按ESC
命令模式切换至底行模式
shift + :
退出vim及保存文件,在底行模式退出:
w 保存当前文件
wq :保存并退出vim)
w! 强制保存
q! 强制退出
i :切换进入插入模式,按“i”进入插入模式后是从光标当前位置开始输入文件;
a :进入插入模式后,是从目前光标所在位置的下一个位置开始输入文字;
o :进入插入模式后,是插入新的一行,从行首开始输入文字。
vim是用小写英文字母h、j、k、l,分别控制光标左、下、上、右移一格,当然也可以用上下左右
G :移动到文章的最后
$ :移动到光标所在行的“行尾”
^ :移动到光标所在行的“行首”
w :光标跳到下个字的开头
e :光标跳到下个字的字尾
b :光标回到上个字的开头
nl :光标移到该行的第n个位置,如:10l
gg :进入到文本开始
shift + g :进入文本末端
ctrl + b :屏幕往“后”移动一页
ctrl + f :屏幕往“前”移动一页
ctrl + u :屏幕往“后”移动半页
ctrl + d :屏幕往“前”移动半页
x :每按一次,删除光标所在位置的一个字符
nx :5x表示删除光标所在位置的“后面(包含自己在内)”5个字符
X :大写的X,每按一次,删除光标所在位置的“前面”一个字符
nX :5X表示删除光标所在位置的“前面”5个字符
dd :删除光标所在行,相当于剪切
ndd :从光标所在行开始删除n行
yy :复制光标所在行到缓冲区。
nyy :例如,5yy表示拷贝从光标所在的该行“往下数”5行文字。
p :将缓冲区内的字符贴到光标所在位置。注意:所有与“y”有关的复制命令都必须与“p”配合才能完成复制与粘贴功能。
r :替换光标所在处的字符
R :替换光标所到之处的字符,直到按下「ESC」键为止。
u :如果您误执行一个命令,可以马上按下「u」,回到上一个操作。按多次“u”可以执行多次回复。
ctrl + r : 撤销的恢复
cw:更改光标所在处的字到字尾处
cnw :更改n个字
ctrl + g :列出光标所在行的行号。
nG :表示移动光标至文章的第n行行首。
set nu :会在文件中的每一行前面列出行号。
n :就会跳到文章的第n行。
/ 关键字 : 先按/键,再输入寻找的字符,如果第一次找的关键字不是您想要的,可以一直按n会往后寻找到您要的关键字为止。
w :保存
q :退出
wq :保存退出。
格式: gcc [选项] 要编译的文件 [选项] [目标文件]
常用选项:
-E 只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里面
-S 编译到汇编语言不进行汇编和链接
-c 编译到目标代码
-o 文件输出到 文件
-static 此选项对生成的文件采用静态链接
-g 生成调试信息。GNU 调试器可利用该信息。
-shared 此选项将尽量使用动态库,所以生成文件比较小,但是需要系统由动态库.
-O0
-O1
-O2
-O3 编译器的优化选项的4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高
-w 不生成任何警告信息。
-Wall 生成所有警告信息。
gcc –E 文件 –o 文件.i 预处理要生成 .i文件
预处理功能主要包括宏定义,文件包含,条件编译,去注释等
gcc –S 文件 –o 文件.s 编译要生成 .s文件
在这个阶段中,gcc 首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,gcc 把代码翻译成汇编语言
gcc –c文件 –o 文件.o 汇编要生成 .o文件
汇编阶段是把编译阶段生成的“.s”文件转成目标文件
gcc –c文件 –o 文件
不指定名字gcc会默认命名为a.out
要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项
常用选项:
list/l 行号:显示binFile源代码,接着上次的位置往下列,每次列10行。
list/l 函数名:列出某个函数的源代码。
r或run:运行程序。
n 或 next:单条执行。
s或step:进入函数调用
break(b) 行号:在某一行设置断点
break 函数名:在某个函数开头设置断点
info break :查看断点信息。
finish:执行到当前函数返回,然后挺下来等待命令
print(p):打印表达式的值,通过表达式可以修改变量的值或者调用函数
p 变量:打印变量值。
set var:修改变量的值
continue(或c):从当前位置开始连续而非单步执行程序
run(或r):从开始连续而非单步执行程序
delete breakpoints:删除所有断点
delete breakpoints n:删除序号为n的断点
disable breakpoints:禁用断点
enable breakpoints:启用断点
info(或i) breakpoints:参看当前设置了哪些断点
display 变量名:跟踪查看一个变量,每次停下来都显示它的值
undisplay:取消对先前设置的那些变量的跟踪
until X行号:跳至X行
breaktrace(或bt):查看各级函数调用及参数
info(i) locals:查看当前栈帧局部变量的值
quit:退出gdb