GCC命令

GCC(GNU Compiler Collection,GNU编译器套件)是由GNU开发的编程语言译器

编译一个简单的.c程序:

四步分开写:

gcc -E -o hello.i hello.c	// 预处理
gcc -S -o hello.s hello.i	// 编译
gcc -c -o hello.o hello.s	// 汇编
gcc -o hello hello.o		// 链接

分成两步:

gcc -c -o hello.o hello.c  // 先编译(做了前三步,但不链接)
gcc -o hello hello.o       // 再链接

一步到位:(这个hello就是可执行文件,存放程序结果)

gcc -o hello hello.c

一下编译多个源文件

gcc -o hello a.c b.c c.c
gcc -o a.o a.c 
gcc -o b.o b.c 
gcc -o c.o c.c 
gcc -o hello a.o b.o c.o   

gcc -o hello hello.c这种一步到位的方法会将文本文件直接转化成可执行文件,这样的做法会比将源代码分别经过预处理,编译,汇编,链接这四个过程的效率要更高,

这是因为在一次编译过程中,gcc -o output file.c会自动执行预处理、编译、汇编和链接这四个步骤,它能够根据需要自动调用相应的工具。这样可以避免中间文件的生成和保存,减少了磁盘I/O的开销,并减少了编译过程中的文件传输时间。

然而,如果你在多次编译中需要重复使用预处理文件、汇编文件或目标文件,或者需要手动进行编译的不同阶段的调试或优化,那么将源代码分别经过预处理、编译、汇编和链接四个步骤可能会更加灵活和方便。

总的来说,对于一次性的编译过程而言,直接使用gcc -o output file.c的方式更高效。而对于多次编译、调试或优化的情况,分阶段进行编译可能更为灵活。在实际使用中,可以根据具体需求和优化目标选择合适的编译方式。

如果说需要编译C++程序的话,就把gcc改成g++即可

g++ -o hello hello.c

GDB命令

GDB是一个功能强大的调试工具,用于调试C、C++等程序
接下来讲一个简单的调试例子,并给出常用的命令:

1.先用GCC命令生成调试信息
在g++/gcc 后面加上 -g表示生成调试信息

g++ -g -o hello hello.cpp

如果不生成的话,会弹出错误
“NO symbol table is loaded”
意味着在您加载的可执行文件中没有找到符号表。符号表包含了程序中变量、函数和其他符号的信息,它是调试器进行源代码和机器码之间映射的关键。

2.使用gdb命令进行调试
gdb的常见命令:
1.使用gdb

gdb myprogram(文件名)

2.设置断点

break <location>

location可以是一个函数,或者是一个源文件加行号的形式,例如:

break main
break hello.cpp:5

3.运行程序

run

4.继续运行程序(在一个断点停下之后)

continue

遇到下一个断点会停下

5.单步执行(不进入函数)

next

6.单步执行(进入函数)

step

7.打印变量的值

print 变量名

8.查看堆栈

backtrace

9.监视变量

watch 变量名

监视变量的值,当该变量的值发生变化时,GDB会中断程序的执行。

10.修改变量的值

set 变量名 = 值

常用命令

接下来给出一个实例:

1.写一个待测试程序hello.cpp,如图
在这里插入图片描述
2.用g++ 命令生成可执行文件
在这里插入图片描述
3.使用gdb命令开始调试
在这里插入图片描述
4.设置断点
在这里插入图片描述
如图,我在程序第6行设置了一个断点,第六行的代码此时为
printf(“%d”,sum);也就是说程序运行到这行之前就停止了

4.使用run命令运行程序
在这里插入图片描述
如图,程序运行到第六行发现有一个断点,停止了运行,并给出了提示.

5.用print打印变量
在这里插入图片描述
会发现x和y的值是正常的,但是因为sum=x+y这条命令没执行,所以sum的值是没初始化的

6.单步执行程序

在这里插入图片描述
我们单步执行下一行语句 sum=x+y之后,再用print打印 sum的值
sum的值变成了15

7.继续运行程序
在这里插入图片描述
因为后续没有断点了,所以程序会直接运行到结束,并输出结果.

Shell脚本

在这里插入图片描述
这些都只是Linux操作系统的一些基本操作
接下来我们说一下如何编写一个简单的shell脚本

1.创建一个.sh后缀的文件

vim create_project.sh

写入:

#!/bin/bash

echo "hello shell"
mkdir my_project
cd my_project
cd ..
mkdir build
touch main.cpp

其中
#!/bin/bash
是告诉操作系统使用Bash解释器来解释和执行后续的Shell脚本代码。Bash(Bourne Again SHell)是一种流行的Unix/Linux Shell,它提供了强大的命令行解释器和脚本编程功能。

使用#!/bin/bash作为shebang行的好处是,它确保脚本在执行时将使用Bash解释器,而不依赖于默认的Shell解释器。这样,您可以确保脚本中使用的特定Bash语法和功能在执行时可用。

除了#!/bin/bash,您还可以使用其他Shell解释器作为shebang行的一部分,例如#!/bin/sh表示使用标准Shell解释器,或#!/bin/zsh表示使用Zsh解释器。根据您的需求和系统配置,选择适合的解释器。

2.设置权限为可运行

chmod +x create_project.sh

3.运行脚本

./create_project.sh     #默认按照第一行的注释使用相应的解释器 

#第一行是 #!/bin/bash就默认使用bash解释器
#如果是   #!/bin/sh 就默认使用shell解释器

也可以显示的指定所使用的解释器

bash create_project.sh  #使用bash解释器运行这个脚本

bash ./create_project.sh  #加上路径,推荐还是加上路径,因为更加安全

如果shell脚本的目录或位置已经在系统的环境变量中了,那么可以直接使用不带路径的运行命令
否则还是必须要使用带路径的运行命令

特殊的:
如果在脚本的第一行写入 #!/bin/bash 指定使用bash解释器,但是却在运行的时候,使用sh运行
那么这种情况,系统是会忽略脚本中的 shebang注释从而改用sh解释器

运行之后,系统就会依次执行shell脚本中的命令.

VIM指令

功能:
(1) 命令行模式下的文本编辑器。
(2) 根据文件扩展名自动判别编程语言。支持代码缩进、代码高亮等功能。
(3) 使用方式:vim filename
如果已有该文件,则打开它。
如果没有该文件,则打开个一个新的文件,并命名为filename
模式:
(1) 一般命令模式
默认模式。命令输入方式:类似于打游戏放技能,按不同字符,即可进行不同操作。可以复制、粘贴、删除文本等。
(2) 编辑模式
在一般命令模式里按下i,会进入编辑模式。
按下ESC会退出编辑模式,返回到一般命令模式。
(3) 命令行模式
在一般命令模式里按下:/?三个字母中的任意一个,会进入命令行模式。命令行在最下面。
可以查找、替换、保存、退出、配置编辑器等。
操作:
(1) i:进入编辑模式
(2) ESC:进入一般命令模式
(3) h 或 左箭头键:光标向左移动一个字符
(4) j 或 向下箭头:光标向下移动一个字符
(5) k 或 向上箭头:光标向上移动一个字符
(6) l 或 向右箭头:光标向右移动一个字符
(7) n:n表示数字,按下数字后再按空格,光标会向右移动这一行的n个字符
(8) 0 或 功能键[Home]:光标移动到本行开头
(9) $ 或 功能键[End]:光标移动到本行末尾
(10) G:光标移动到最后一行
(11) :n 或 nG:n为数字,光标移动到第n行
(12) gg:光标移动到第一行,相当于1G
(13) n:n为数字,光标向下移动n行
(14) /word:向光标之下寻找第一个值为word的字符串。
(15) ?word:向光标之上寻找第一个值为word的字符串。
(16) n:重复前一个查找操作
(17) N:反向重复前一个查找操作
(18) :n1,n2s/word1/word2/g:n1与n2为数字,在第n1行与n2行之间寻找word1这个字符串,并将该字符串替换为word2
(19) :1, s / w o r d 1 / w o r d 2 / g :将全文的 w o r d 1 替换为 w o r d 2 ( 20 ) : 1 , s/word1/word2/g:将全文的word1替换为word2 (20) :1, s/word1/word2/g:将全文的word1替换为word2(20):1,s/word1/word2/gc:将全文的word1替换为word2,且在替换前要求用户确认。
(21) v:选中文本
(22) d:删除选中的文本
(23) dd: 删除当前行
(24) y:复制选中的文本
(25) yy: 复制当前行
(26) p: 将复制的数据在光标的下一行/下一个位置粘贴
(27) u:撤销
(28) Ctrl + r:取消撤销
(29) 大于号 >:将选中的文本整体向右缩进一次
(30) 小于号 <:将选中的文本整体向左缩进一次
(31) :w 保存
(32) :w! 强制保存
(33) :q 退出
(34) :q! 强制退出
(35) :wq 保存并退出
(36) :set paste 设置成粘贴模式,取消代码自动缩进
(37) :set nopaste 取消粘贴模式,开启代码自动缩进
(38) :set nu 显示行号
(39) :set nonu 隐藏行号
(40) gg=G:将全文代码格式化
(41) :noh 关闭查找关键词高亮
(42) Ctrl + q:当vim卡死时,可以取消当前正在执行的命令
异常处理:
每次用vim编辑文件时,会自动创建一个.filename.swp的临时文件。
如果打开某个文件时,该文件的swp文件已存在,则会报错。此时解决办法有两种:
(1) 找到正在打开该文件的程序,并退出
(2) 直接删掉该swp文件即可


以二进制模式打开文件:

vim -b 文件名

这里面的命令都有各种形式的变化,比如当我们使用复制命令:y时

:1,2y     表示复制 1-2行的内容

我们还可以使用可视模式

将光标移动到要复制的起始位置。
按下 v 进入普通可视模式。
使用方向键或 hjkl 键选择要复制的部分。
按下 y 复制选中的部分。
按下 p 将复制的内容粘贴到光标位置之后。
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐