linux 学习工具之gcc/g++ gdb
一、gcc g++
1.1 语法
1、编译一个c程序1
gcc -o output_file test.c
- 说明:
-o output_file:指定输出的可执行文件名
text.c: c源文件名
2、示例1
2gcc -o test test.c
./test.c
3、编译c++程序1
2g++ -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
4gcc -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 | (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也支持一直监视变量,使用指令display1
diaplay 变量
如果不知道程序中有哪些变量,可以随时随地的通过指令 l 查看,这种查看式的指令,是不会影响到其他指令运行的。
c断点
之前的r无法实现两个断点间的跳转,因此有个专门的命令进行断点跳转。(首先需要通过r指令把程序跑起来)
三、make&&makefile的使用
先创建个text.c文件 然后让他指向makefile1
2touch test.c
ls ->makefile
然后vim makefile,在里面输入以下内容1
2
3
4
5mytest:mytest.c
gcc -o $@ $^ -std=c99
clean:
rm -f mytest
总结
以上就是linux工具,如有不对的地方请指正!