vim,gcc/g++,gdb的基本使用
vim
vim是Linux下的一款编辑器,是用来专门写代码的,vim有三种模式
vim打开时处于命令模式,是不能直接写代码的,需要切换到插入模式才可写代码。vim从命令模式切换到插入模式有如下方法:
命令 | 作用 |
---|
a | 光标后移一个字符,进行插入 | A | 在光标所在行的行尾进行插入 | i | 光标位置不变,在光标位置插入 | I | 在光标所在行的行首插入 | o | 在光标所在行的下一行进行插入(会新起一行) | O | 在光标所在行的上一行进行插入(会新起一行) | s | 删除光标位置的一个字符后在光标位置插入 | S | 删除光标所在行后进行插入 |
其中切换到行首(I)/行尾(A)进行插入较常用,vim从编辑模式切换到命令模式按Esc。
vim命令模式的命令:
命令 | 作用 |
---|
ctrl + b | 上翻一页 | ctrl + f | 下翻一页 | ctrl + u | 上翻半页 | ctrl + d | 下翻半页 | zz | 将光标所在行调整到屏幕中间 | zb | 将光标所在行调整到屏幕下方 | zt | 将光标所在行调整到屏幕上方 | 0 | 光标位置定位到行首 | ^ | 光标位置定位到行首 | $ | 光标位置定位到行尾 | x | 删除光标位置的字符 | X | 删除光标前一个位置的字符 | D | 删除光标所在位置到行尾的所有内容 | dG | 删除光标所在行到文件末尾的内容 | u | 撤销上一步的操作 | ~ | 大小写转换 | yy | 赋值光标所在行 | dd | 剪切光标所在行 | p | 将复制(剪切)的内容粘贴到光标的下一行 | P | 将复制(剪切)的内容粘贴到光标的上一行 | r | 取代光标所在位置的一个字符 | R | 取代光标所在位置的多个字符 |
在vim的命令模式下,可以使用ctrl + v切换到视图模式实现代码的批量注释。具体操作:
- ctrl + v进入视图模式
- 使用
hjkl 选择想要注释的区域
-
按下I -
输入// -
Esc
vim的底行模式:在vim的命令模式下,按住shift + : 进入底行模式,vim的底行模式可以支持查找,批量修改等丰富操作。
底行模式命令 | 作用 |
---|
n | 将光标切换到第n行 | n1,n2d | 删除行号为[n1,n2]的所有内容 | ! | 在使用vim的时候不用退出编辑器即可使用命令 | wq! | 强制保存退出 | set nu | 显示行号 | /string | 在文本中搜索与指定字符串string相关的内容 |
gcc/g++
- gcc/g++是Linux下的编译器,专门用来编译代码
- gcc编译器不光可以编译c语言,还支持编译 Go、Objective-C,Objective-C ++,Fortran,Ada,D 和 BRIG(HSAIL)等程序
- gcc/g++编译器可以展示一个.c文件到二进制可执行文件的所有过程
gcc/g++可以分步实现对.c文件的预处理,编译,汇编,链接。
-
预处理(pre-processing) gcc -E test.c -o test.i
-
编译(compiling) gcc -S test.i -o test.s
-
汇编(assembing) gcc -c test.s -o test.o
-
链接(linking) gcc test.o -o mybin
gcc/g++编译器的重要参数:
-
-g 表示编译产生的可执行文件带有调试信息。默认产生的可执行文件是release的 -
-o 可以对源代码进行优化,-o参数有4个等级,-o0,-o1,-o2,-o3,-o0默认是不优化,-o3是最高优化级别,一般如果进行优化,-o2就足够。使用-o优化可能会丢失程序的调试信息,使其无法调试。 -
-Wall 打印警告信息,例如这里有一段代码: #include<stdio.h>
int main()
{
int a=10;
printf("hello world\n");
return 0;
}
使用-Wall: [slowstep@localhost day01]$ gcc test.c -o mybin -Wall
test.c: In function ‘main’:
test.c:4:9: warning: unused variable ‘a’ [-Wunused-variable]
int a=10;
^
-
-std=c++11 指定使用的c标准或c++标准。 -
-D 定义宏。例如: #include<stdio.h>
int main()
{
#ifdef DEBUG
printf("hello\n");
#endif
#ifndef DEBUG
printf("world\n");
#endif
return 0;
}
运行: gcc -DDEBUG test.c -o mybin_debug
gcc test.c -o mybin
./mybin
world
./mybin_debug
hello
gdb
gdb是Linux下一款强大的调试器,其主要功能有:
-
设置断点(断点可以是条件表达式) -
使程序在指定的代码行上暂停执行,便于观察 -
单步执行程序,便于调试 -
查看程序中变量值的变化 -
动态改变程序的执行环境 -
分析崩溃程序产生的core文件
gdb调试的程序必须是debug的,在使用gcc/g++编译程序时,要加上-g选项,生成的程序才能调试。
gdb的常用命令:
$(gdb)run(r)
$(gdb)list(l)
$(gdb)next(n)
$(gdb)step(s)
$(gdb)break+num(b)
$(gdb)info b
$(gdb)delete breakpoints num(d)
$(gdb)finish
$(gdb)continue(c)
$(gdb)print(p)
$(gdb)info breakpoints
$(gdb)enable breakpoints
$(gdb)disable breakpoints
$(gdb)display
$(gdb)undisplay
启用断点和禁用断点的解释:gdb中可以使用info b来查看断点信息,默认打的断点是开启的。可以通过Enb查看。
(gdb) info b
Num Type Disp Enb Address What
1 breakpoint keep y 0x0000000000400529 in Sum at test.c:6
breakpoint already hit 29 times
2 breakpoint keep y 0x0000000000400555 in main at test.c:12
在禁用断点以后,断点的Enb变为n,表示断点失效。
(gdb) disable breakpoints 2
(gdb) info b
Num Type Disp Enb Address What
1 breakpoint keep y 0x0000000000400529 in Sum at test.c:6
breakpoint already hit 29 times
2 breakpoint keep n 0x0000000000400555 in main at test.c:12
|