这里写目录标题
- GCC命令
- GDB命令
- Shell脚本
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
或者
bash create_project.sh
运行之后,系统就会依次执行shell脚本中的命令.