vim,gccg++,gdb的基本使用


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切换到视图模式实现代码的批量注释。具体操作:

  1. ctrl + v进入视图模式

在这里插入图片描述

  1. 使用hjkl选择想要注释的区域

在这里插入图片描述

  1. 按下I

  2. 输入//

  3. 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文件的预处理,编译,汇编,链接。

  1. 预处理(pre-processing)

    gcc -E test.c -o test.i
    # -E表示编译器仅对.c文件进程预处理操作生成.i文件
    
  2. 编译(compiling)

    gcc -S test.i -o test.s
    # -S表示对预处理过后的.i文件进行编译,生成.s文件
    
  3. 汇编(assembing)

    gcc -c test.s -o test.o
    # -c表示对编译过后的.i文件进行汇编,生成.o文件
    
  4. 链接(linking)

    gcc test.o -o mybin
    # 生成可执行文件
    

gcc/g++编译器的重要参数:

  1. -g 表示编译产生的可执行文件带有调试信息。默认产生的可执行文件是release的

  2. -o 可以对源代码进行优化,-o参数有4个等级,-o0,-o1,-o2,-o3,-o0默认是不优化,-o3是最高优化级别,一般如果进行优化,-o2就足够。使用-o优化可能会丢失程序的调试信息,使其无法调试。

  3. -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;
             ^
    
  4. -std=c++11 指定使用的c标准或c++标准。

  5. -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) # 在第num行设置断点

$(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 # 取消追踪观察变量,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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值