| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 开发工具 -> Linux环境详解 -> 正文阅读 |
|
[开发工具]Linux环境详解 |
目录 vim的详细解绍 程序运行过程(C) Linux调试器——gdb 制作进度条 在Linux中使用gitee vim的详细解绍 vim的概念? vim是一个文本编辑器(多模式的编辑器),从定位上,和记事本没有任何差别,是vi的前身 vim的主要三种模式 命令模式,插入模式,底行模式 三种模式切换 ? vim的命令模式 光标相关 光标除了可以用上下左右键移动外,还能用h(左),j(下),k(上),l(右) 光标位置锚点:shift+^——>当前行行首)? shift+$——>当前行行尾 gg——>起始行? shift+g——>结束行? n+shift+g——>指定行 w/b:按照单词为单位进行前后光标移动 文本操作 yy:复制当前行 nyy:复制当前行及其之后的n行,包括当前行 u:撤销误操作 p:粘贴 np:一次重复粘贴n行 dd:删除当前光标所在行,支持ndd dd+p:剪切功能 shift+~:快速大小写切换 x:左向右删除光标之后的一个字符,支持nx X:右向左删除光标之前的一个字符,也是支持nX r:替换一个字符,即光标所在的字符,支持nr shift+r:替换模式,直接进行多个内容的替换 Ctrl+r:撤销最近的撤销 vim的底行模式 set nu:调出行号 set nonu:取消行号 vs 文件:多文件操作 w:保存 q:退出 !:强制[w!,q!,wq!] vim的配置 创建一个.vimrc的隐藏文件,然后进入该文件进行配置,比如设置行号,然后保存退出,再进入其 它文件时就有了行号 不过一般不自己去配置,采用别人已经配置好了的即可,如下链接就是一个简易版的vim配置,只 需将其拷贝到Linux上即可 curl -sLf?https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh?-o ./install.sh && bash ./install.sh 注意:vim配置在自己的配置文件中,只会影响自己的操作! 程序运行过程(C) 一个C语言程序的正常运行有四步:预处理,编译,汇编,链接 预处理:头文件展开,去除注释,条件编译,宏替换等 下图中的E让程序完成预处理后,就停下来,而-o test.i,则是生成一个临时文件,将预处理后的 结果保存在临时文件中,而不是打印在屏幕上 编译:将C语言代码转换成汇编代码 下图中的S表示开始进行翻译,在完成翻译后停下来,和上面类似,将翻译后的结果保存至临时文件中 汇编:将汇编代码转换成机器可识别代码 下图中的c表示开始进行程序的翻译,完成汇编工作后停下来,和上面类似,将翻译后的结果保存 至临时文件中,这里的test.o就等同于vs中的test.obj文件 以二进制形式输出到屏幕 链接:生成可执行文件或库文件 链接过程是将我们自己的代码中的函数调用,外部数据和库关联起来 下图中将链接后的结果保存至一个文件中,这个文件是一个可执行文件,相当于vs中的.exe文件 上述中的gcc -c test.c -o test.o也可写成gcc -o?test.o test.c 在Linux中,静态库:.a,动态库:.so,都和程序成功运行有关,也就可分为静态链接和动态链接 动态链接:比如你在学校,没有电脑使用,需要查资料时,就到网吧去查,从学校到网吧再到学 校,就是一个动态链接的过程 静态链接:比如你自己买了台电脑,就不再需要去网吧查资料,需要查时,在自己电脑查就可以, 这就是静态链接,静态链接也就是将库中的代码拷贝进我自己的可执行程序中。不再需要使用任何 库! 如下图,gcc默认采用动态链接方式,形成可执行程序? 静态链接需要静态库,动态链接需要动态库! 如下图,两种链接方式形成的文件占用空间的大小很显著 Linux调试器——gdb 如果一个程序是可以被调试的,那该程序的二进制文件一定加入了一些debug信息! centos中,默认的可执行程序是debug 如下图,要将release版本变为debug版本,则要在后面加-g,而通过对比可看出debug所占的空 间要大一些,在debug版本中同时也能看到debug版本中的一些debug信息 注意:gdb调试程序,必须是debug方式发布,也就是gcc -g 调试快捷键 下方的test得是一个可执行文件! l:每次显示最多10行,可以指定某行 b:打断点 d:删除断点 info:显示断点信息,而下方这个y表示这个断点有用,如果是n,则表示这个断电被禁用了 enable:启用断点 disable:禁用断点 run:直接运行程序 display:显示变量大小 undisplay:取消变量显示大小 until:跳转到指定行 continue:跳至下一个断点 ?finish:执行到当前函数返回,然后停下来等待命令 s:相当于vs中的F11,逐语句 n:相当于vs中的F10,逐过程,与s不同的是它遇到函数调用,不会进入函数 quit:退出函数调用 make与Makefile make是一条命令,Makefile是一个文件 在vs中,文件的编译顺序我们不需要管,vs自己帮我们去定了,但在Linux需要我们维护文件和文 件之间的互相依赖关系 只有依赖关系与依赖方法共同作用才能达到形成可执行程序的目的! 创建可执行文件 下面第一个图第一个红线哪儿必须是table键,后面的-std=c99则是因为test.c中有 for(int i = 0;i <=100;++i),需要c99才能支持 i 这么定义,test依赖于test.c,而test.c形成test, 则需要依赖方法 做了上图中的后,只需要make就能执行其上图的黄色的哪一行指令,同时添加一个test的可执行 文件,第二次make后出现的提示,表示test文件已经存在了 清理可执行文件 下方的.PHONY是修饰对应的符号,让符号变成伪目标的概念,总是可以执行的,和上面第二次执 行make就有所不同 创建可执行文件只需要make,删除可执行文件是make clean的原因 make扫描Makefile文件的时候,默认只会形成一个目标依赖关系,一般是第一个!建议把创建可 执行文件放在第一行 如下图,也可以采用这种方式来配置Makefile文件,在输入make时,$@会被替换为test,而$^会 被替换为test.c 制作进度条 回车与换行(\n)的区别 回车:回到当前行的最开始 换行:列不变,新起一行 如下图,在运行下面的代码后,不会立即打印hello Mike!,而是会等程序结束后再打印,但并不 是sleep语句比printf语句先执行 原因: printf已经执行,但是数据没有被立即刷新到显示器中!,因为没有\n,所以字符串会暂时保存至 用户C语言级别的缓存区 显示器设备刷新策略就是遇到\n即进行刷新 如果想不带\n,让它快速刷新,就可以调用下图中的函数接口 ? C程序,默认会打开三个输入输出流 stdin:键盘,stdout:显示器,stderr:显示器 注意: 凡是显示到显示器上面的内容都是字符 凡是从键盘读取的内容也是字符 键盘与显示器也被称为字符设备! 如下图,就是一个简易进度条的代码,\r是回车,让其每次都从一行的开头刷新,用usleep是以微 秒为单位,而sleep则是以秒为单位,会太慢,所以这里用usleep,前面\033[31m则是printf的配 色方案中的一种,来改变颜色 在Linux中使用gitee 安装git,安装完成后,输入指令可以看到一些信息及其版本 将其仓库克隆在Linux上,即把地址拷贝到下面指令的后面即可,完成后可以看到一个新的文件 ?? 添加文件,git add? 文件? 提交文件,git commit -m 日志,填日志信息 如果出现上图所述的情况,就需要输入下图中的信息,邮箱和gitee用户名 最后是git push即可,然后就可以在仓库中看到刚上传的文件 git status 文件被添加后,可以看到将要被提交的文件 ? git log? 可以看到提交的文件的日志信息? ? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 22:44:51- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |