Linux预处理.c文件后的代码,Linux中C编程编译与调试

66b52468c121889b900d4956032f1009.png

8种机械键盘轴体对比

本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?

gcc编译器

gcc编译流程

10

【Tips】

* Linux的可执行文件没有Windows那么明显的.exe扩展名,只需向其分配x权限即可。

sudo chmod u+x filename

* gcc可以在编译的任何阶段结束,以便检查或使用该阶段的输出。

gcc支持编译的扩展名

扩展名源文件.cC语言源代码文件

.C .cc .cppC++源代码文件

.h头文件

.a存档文件

.i经过预处理的C源代码文件

.ii经过预处理的C++源代码文件

.s汇编语言源代码文件

.S经过预编译的汇编语言源代码文件

.o编译后的目标文件

gcc参数

参数作用-o指定生成的输出文件

-s将C代码转换为汇编代码

-c仅执行编译操作,不进行链接操作

应用

无参数编译

gcc a.c

将a.c预处理、汇编、编译、链接成可执行文件。未指定输出则默认a.out

指定输出的文件

gcc a.c -o do

指定a.c输出为do可执行文件

gcc a.c -o /tmp/do

指定输出为/tmp目录下的do文件

多源文件的编译多个文件一起编译

gcc a.c b.c -o do

将a.c和b.c分别编译后链接成do文件

分别编译各个源文件,对编译后输出的目标文件链接gcc -c a.c #将a.c编译成a.o

gcc -c b.c #将b.c编译成b.o

gcc -o a.o b.o -o do #将a.o 和 b.o 链接成do123

以上两个方法,第一个方法编译时需要重新编译所有文件,第二个只重新编译修改的文件,未修改的文件不用重新编译。

查看编译过程

gcc -v a.c

查看编译过程和显示调用的库。

C程序的编译

编写C程序

使用VIM编写简单的C程序。

1. 打开终端

2. 在用户家目录下新建一个c文件夹

mkdir ~/c

3. 打开VIM。vim

4. 编写C程序int (){

printf("hello");

return 0;

}12345编写完成后,按Esc返回到普通模式,保存文件到家目录下的c文件夹,保存为a.c

:wq ~/c/a.c

使用gcc编译打开终端,进入上文创建的~/c文件夹。

cd ~/c

使用gcc编译

gcc a.c -o a

执行编译出的可执行文件

./a

编译过程详解

9bcd9b20182143a1f72b18fc2ba6e79f.png

* 预处理:对预编译语句(如宏定义define)和文件包含进行处理。需要完成的工作室对预编译指令进行替换,把包含文件放置到需要编译的文件中。最终生成一个非常完整的C源文件。

* 编译:对预处理后的文件编译,生成.s的汇编语言文件。

* 汇编:处理汇编语言。调用汇编处理程序将汇编语言汇编成二进制代码。最终生成.o目标文件。

* 链接:将多个汇编生成的目标文件以及引用的库文件进行模块链接生成一个完整的可执行文件。

gdb调试器

gdb简介

主要使用gdb进行下面5个方面的操作:

* 启动程序:在启动程序时,可以设置程序运行环境。

* 设置断点:这里的断点可以使行数、程序名称或条件表达式。

* 查看信息:断点停止后,可以查看程序的运行信息和显示程序变量的值。

* 分步运行:使程序一个个语句的执行。

* 改变环境:可以在程序运行时改变程序的运行环境和程序变量。

在程序中加入调试信息

为了使用gdb进行调试,需要在编译程序中加入供gdb使用的调试信息。使用-g参数

gcc -g -o a.debug a.c

编译a.c生成一个a.debug的可执行程序,其中加入了供调试所用的信息。

gdb的使用

启动gdb

在终端输入

gdb

加载需要调试的程序

file a.debug

运行结果如下,证明已加载此文件。

Reading symbols from /home/tian/a.debug ...done

在gdb中查看代码

用gcc -g编译后的a.debug程序加入了断点。可以用list查看程序的源代码和断点。

1.list 1,会显示第一个断点前的代码。以上文a.c为例,会显示以下:

18835e9dde52c2a3706de0ab5533b7e3.png

2.按Enter键会显示下一个断点前的代码。

加入断点

break命令可以增加断点。如在上文的例程第3行增加一个断点。

break 3

查看断点

info break

运行程序run运行程序

next在下一行停下

continue在下一个断点位置停下

step单步运行。

step与next类似,都可以实现单步运行。不同的是,在遇上函数调用时,step可以进入函数内部,next跳过函数的调用

变量的查看

print

退出调试

q

gdb常用命令backtrace:显示程序中的当前位置和表示如何到达当前位置的栈跟踪

cd:改变当前工作目录

clear:删除刚才停止处的断点

delete:删除一个断点

display:程序停止时显示变量和表达式

info files:显示被调试文件的信息

info func:显示所有的函数名称

info local:显示所有的局部信息变量

info var:显示所有的全局和静态变量名称

whatis:显示变量或函数类型

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值