Linux——gcc/g++使用、make/Makefile、Linux调试器-gdb使用

目录

一、Linux编辑器-gcc/g++使用

1、背景知识

2、gcc如何完成

3、gcc选项

二、Linux项目自动化构建工具-make/Makefile

1、背景

2、项目清理

三、Linux调试器-gdb的使用

1、背景

2、具体使用


一、Linux编辑器-gcc/g++使用

1、背景知识

        ·预处理

        ·编译(生成汇编)

        ·汇编(生成机器可识别代码)

        ·链接(生成可执行文件或库文件)

2、gcc如何完成

(1)预处理

        ·预处理功能主要包括宏定义,文件包含,条件编译,去注释等。

        ·预处理指令是以#开头的代码行

        ·实例:gcc -E test.c -o test.i

        ·选项"-E",该选项的作用是让gcc在预处理结束后停止编译过程

        ·选项"-o"是指目标文件,".i"文件为已经经过预处理的C原始程序

(2)编译(生成汇编)

        ·在这个阶段中,gcc首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,gcc把代码翻译成汇编语言

        ·用户可以使用"-S"选项来进行查看,该选项只进行编译而不进行汇编,生成汇编代码

        ·实例:gcc -S test.i -o test.s

(3)汇编(生成机器可识别代码)

        ·汇编阶段是把编译阶段生成的".s"文件转成目标文件

        ·使用"-c"就可看到汇编代码已转化为".o"的二进制目标代码

        ·实例:gcc -c test.s -o test.o

(4)链接(生成可执行文件或库文件)

        ·在成功编译后,就进入了链接阶段

        ·实例:gcc test.o -o test

3、gcc选项

        ·-E只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里面

        ·-S 编译到汇编语言不进行汇编和链接

        ·-c编译到目标代码

        ·-o文件输出到文件

        ·-static 此选项对生成的文件采用静态链接

        ·-g生成调试信息。

        ·-shared 此选项将尽量使用动态库,所生成文件较小,但需要系统有动态库

        ·-O0

        ·-O1

        ·-O2

        ·-O3 编译器的优化选项的4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高

        ·-w不生成任何警告信息

        ·-Wall 生成所有警告信息

二、Linux项目自动化构建工具-make/Makefile

1、背景

        ·一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,Makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作

        ·Makefile的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大提高了软件开发效率

        ·make是一个命令工具,是一个解释Makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令

        ·make是一条命令,Makefile是一个文件,两个搭配使用,完成项目自动化构建

2、项目清理

        ·工程是需要被清理的,像clean这种,没有被第一个目标文件直接关联,那么它后面所定义的命令将不会被执行,不过,我们可以显示要make执行。即命令——“make clean”,以此来清除所有的目标文件,以便重新编译。

        ·但是一般我们这种clean的目标文件,我们将它设置为伪目标,用.PHONY修饰,伪目标的特性是,总是被执行的。

三、Linux调试器-gdb的使用

1、背景

        ·程序的发布方式有两种,debug和release两种

        ·Linux gcc/g++出来的二进制程序,默认是release模式

        ·要使用gdb调试,必须在源代码生成二进制程序的时候,加上-g选项

2、具体使用

        要使用gdb首先要有一个可调试的代码

        以如下代码为例。

 

        首先gdb+可执行文件进入gdb,ctrl + d或q退出调试

(1)list/l 行号:显示源代码,接着上次的位置向下列,每次列10行

(2)r或者run:运行程序。如果没有断点就直接运行结束

(3)b 行号:在某一行设置断点

(4)info b:查看断点信息

(5)d 断点编号:删除断点,断点标号可以通过info b查看

(6)n或next:带条执行

(7)p 变量:打印变量值

(8)s或step:进入函数调用

 

(9)bt:查看各级函数调用及参数

 

(10) finfish:执行到当前函数返回,然后停下来等待命令

(11)display 变量名:跟踪查看一个变量,每次停下来都显示它的值

(12)undisplay:取消对先前设置的那些变量的跟踪

(13)until x行号:跳至x行

(14)continue或c:从当前位置开始连续而非单步执行程序,运行至下一个断点处停下来

(15)disable 断点编号:禁用断点

 (16)enable 断点编号:启用断点

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值