一、gcc g++

1.1 语法

1、编译一个c程序

1
gcc -o output_file test.c

  • 说明:

    -o output_file:指定输出的可执行文件名
    text.c: c源文件名

2、示例

1
2
gcc -o test test.c
./test.c

3、编译c++程序
1
2
g++ -o hello_cpp hello.cpp
./hello.cpp

2.2

认识-o
gcc 源文件会把代码编译链接生成可执行文件 a.out. 不想生成默认的a.out文件,想生成指定文件,可以 直接通过-o选项就行

1
gcc test.c -o hello

g++ 同理
1
g++ my.cpp -o hello

😆-E 处理
c语言中,有个源文件变成可执行文件, 即预处理-编译-汇编-链接,
第一步:预处理,也是预编译

  • 会进行头文件展开、删除注释、替换宏0*
  • 目的是生成一个纯粹的c代码程序
  • 经过预处理后的文件后缀为 .i

😊-S编译

  • 该步骤会进行语法分析、词法分析、语义分析、符号汇总等,然后将合法的代码转为汇编代码
  • 编译的目的是转为汇编代码
  • 生成后的文件后缀为.s*
1
gcc -S test.c -o test.s

😆-c汇编

  • 主要是将汇编代码转换为二进制,并生成符号表*
  • 二进制格式为 elf,此时vim查看为乱码
  • 生成的文件后缀为 .o

可以通过-c选项使gcc在执行完汇编阶段后就停下来,指定保存文件为test.o
查看生成的test.o文件,可以用readelf。

1
2
3
4
gcc -c test.c -o test.o
ls
//查看elf格式的文件
readelf -a test.o

😝gcc链接

1
gcc test.c -o myfile //生成可执行文件为myfile

✌️温馨提示:
如果你在linux上写代码后,不知道怎么保存退出,按下Esc键,再Shift +冒号(:),再按 wq,然后打下回车键,就算保存修改并且退出了编辑界面。

二 gdb使用

vim 编写代码,gcc/g++编译代码,那么gdb调试代码。

1
gdb myfile   //进入调试

l 查看代码

l 10 表示从代码第一行开始查看其前后10行

1
2
(gdb) l 10
(gdb) l //默认前10行

退出调试

1
(gdb) q

r运行程序

1
(gdb) r //运行程序

r就相当于f5

b断点操作

1
2
(gdb) b 行号
(gdb) b 函数名 //在指定函数处打断点

查看断点信息

指令 info b可以搜索所有断点,并展示其详细信息

1
info b

取消断点

想取消断点,可通过 d 断点编号,取消指定断点

1
(gdb) d 1

s单步调试

单步调试类似于vs中的f11,不同于单行调试,单步调试能进入函数内部。指令为s.

1
(gdb) s

until 指定行

1
(gdb) util 12 //表示跳转到指定行

查看变量

调试过程中少不了查看变量信息,类似于vs中的监视窗口。
bt查看调用堆栈

1
(gdb)bt

p临时查看变量

1
(gdb) p变量

注意:p只能做到临时监视,当执行下一条指令后,原来监视的变量就看不到了。

display常显示变量

gdb也支持一直监视变量,使用指令display

1
diaplay 变量 

如果不知道程序中有哪些变量,可以随时随地的通过指令 l 查看,这种查看式的指令,是不会影响到其他指令运行的。

c断点

之前的r无法实现两个断点间的跳转,因此有个专门的命令进行断点跳转。(首先需要通过r指令把程序跑起来)

三、make&&makefile的使用

先创建个text.c文件 然后让他指向makefile

1
2
touch test.c
ls ->makefile

然后vim makefile,在里面输入以下内容
1
2
3
4
5
mytest:mytest.c
gcc -o $@ $^ -std=c99
.PHONY:clean
clean:
rm -f mytest


总结
以上就是linux工具,如有不对的地方请指正!