linux常用工具和gcc编译器

常用工具:

yum:软件包管理工具

  • 软件包
    Linux下软件安装方式
    源码安装(手动安装一个个依赖关系库)
    工具安装(自动检测解决依赖关系库的安装)

  • yum使用

  • yum list
    1.查看能够安装那些软件包
    yum list |grep package_name
    2.查看已经安装了那些软件包
    yum list installed | grep package_name
    3.安装软件包
    yum install package_name
    yum install vim—文本编辑工具
    yum install gcc—程序编译工具
    yum install gdb—程序调试工具
    yum install git—版本控制工具
    yum install lrzsz—文件传输工具
    4.移除已安装的软件包
    yum remove package_name

  • lrzsz的使用
    rz:从主机传输文件到服务器/虚拟机
    sz filename:从虚拟机/服务器传输指定文件到主机

  • vim编辑器:
    vim共有12种模式,最常用的是三种:普通模式,插入模式,底行模式
    vim main.c
    普通模式:完成编辑一个文件最常见的操作(光标移动,复制,粘贴,剪切,撤销,恢复撤销)
    插入模式:插入数据
    底行模式:保存/退出 vim设置

  • 模式切换:

    • 普通模式<->插入模式
    • 普通->插入 i (从光标所在位置开始插入)I(光标移动到行首,开始插入)a (光标移动到后一个字符,开始插入)A (光标移动到行尾,开始插入)o (向光标所在行下方添加新行,开始插入)O(向光标所在行上方添加新行,开始插入)
    • 插入->普通 ESC
    • 普通->底行:
    • 底行->普通 ESC
  • 普通模式下的操作:

    • 光标移动:(h/j/k/l:左下上右) (w/b:按单词右左移动) (ctrl+f/b:向下/向上翻页) (gg/G:文档首行/尾行)
    • 复制:(yy 复制光标所在行)(nyy 从光标所在行开始向下复制n行)
    • 粘贴:(p,向光标所在行下方粘贴新行)(P,向光标所在行上方粘贴新行)
    • 剪切/删除:(x,删除光标所在字符)(dw,删除光标所在单词 )(dd,删除光标所在行)(ndd,从光标所在行开始向下删除n行)
    • 撤销:u
    • 恢复撤销:ctrl+r
    • 全文对齐:gg=G
  • 底行模式的操作:

    • :q 退出
    • :w 保存
    • :wq 保存并退出
    • :q!退出不保存(强制退出)set nonumber set nu
    • :!command 临时执行command命令
    • /string 向下字符串匹配查找
    • ?string 向上字符串匹配查找

    vi编辑 ./运行 python bash是shell之一 脚本语言不用编译
    python bash命令行解释器 脚本解释程序
    写代码快,性能低 c/c++写代码多,但是性能高

gcc:编译器

将高级语言(c语言)编译成为机器可识别的指令代码

  • 编译过程:
    • 预处理:去掉注释,展开所有代码 eg:gcc -E main.c(进行预处理,打印到界面上) -o(用于指定要生成的文件名称)main.i
    • 编译:语义语法纠错,将代码解释成为汇编代码 eg: gcc -S main.i -o main.s
    • 汇编:将汇编代码解释成为机器指令代码 eg: gcc -c main.s -o main.o (汇编,-c只汇编不链接) objdump -S main.o(查看)
    • 链接:链接代码库以及所有的目标文件,生成可执行程序
    • 库文件:大佬们实现一些常用的功能接口,为了防止每次编译耗费时间,因此将这些接口代码进行编译汇编,并且将汇编完成的代码存储到了一个文件中,这个文件就叫库文件

    这时候如果大家想使用库函数,这时候就需要包含头文件,因为头文件中声明了这个函数的存在,这时候编译器在头文件中检测到了这个声明,就知道有这个函数的时间,就不会报错了。
    最终链接生成可执行程序的时候,因为要具体让cpu处理指令,因此就必须将这些接口的具体实现拿过来

gcc的链接方式:

  • 静态链接:链接静态库,链接时将库中代码写入到可执行程序中,优点:运行时不依赖库的存在,缺点:但是占用资源较多,并且如果大量的程序静态链接,会在内存中造成代码冗余。
  • 动态链接:链接动态库,链接时,只记录接口位置信息符号信息,并不拷贝代码,优点:占用资源少,在内存中大量程序可以共享使用(共享库),缺点:运行时需要依赖库的存在(运行时库)

gcc编译器的默认链接方式:动态链接

gdb:调试器 eg: gdb ./main(加载一个程序)

  • 调试一个程序的前提是什么?
    • 生成debug版本程序,向程序中添加调试符号信息
      Linux下gcc默认生成的程序是release版本程序,需要加上-g选项,生成debug版本程序
      eg:gcc -g(开启程序调试,生成debug版本程序,向程序当中添加调试符号信息) main.c -o main
    • gdb加载程序
      • gdb ./main
      • gdb先进入,然后(gdb)file ./main
        gdb->file ./main
    • 获取运行参数,并运行程序
      r -a -l -s -t 等等(一次即可)
  • 最常见的调试操作有哪些?
    • 打印内容:
      • p(print)打印变量内容
        eg:p var_name
    • 单步调试:
      • start 开始逐步调试
      • l (list)查看调试行附近代码
        eg:l fine(文件名):line(行号)
      • n(next)下一步:不进入函数,直接将函数运行
      • s(step)下一步:跟踪进入函数
      • until 直接运行到指定行
        eg:until file:line
    • 打断点:
      • b (break):打断点
        eg:b file:line
        b function_name
      • i(info):查看断点信息
        eg:i b 查看断点信息
      • d(delete)删除断点
        eg:d b_id (断点编号)
      • watch:变量监控
        eg:watch var_name(变量名)
      • c(continue)继续开始运行(断点停下后继续运行)
    • 查看调用栈信息(查看程序崩溃):
      bt:快速定位程序崩溃位置
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值