gcc编译

gcc是编程语言编译器。可以编译c,c++,java,,,
首先:

.c为后缀的文件,C语言源代码文件;
.a为后缀的文件,是由目标文件构成的库文件;
.C,.cc或.cxx 为后缀的文件,是C++源代码文件;
.h为后缀的文件,是程序所包含的头文件;
.i 为后缀的文件,是已经预处理过的C源代码文件;
.m为后缀的文件,是Objective-C源代码文件;
.o为后缀的文件,是编译后的目标文件;
.s为后缀的文件,是汇编语言源代码文件;
.S为后缀的文件,是经过预编译的汇编语言源代码文件
转载

gcc编译器的使用

选项含义
-o预处理、汇编、编译并链接形成可执行文件,用来指定输出文件的文件名
-c将汇编输出文件编译输出.o编译后的目标文件
-E将.c预处理输出.i的预编译文件
-S将预处理输出.i预编译文件。汇编成.s汇编语言源代码文件
-O使用编译优化级别1编译程序。级别为1~3,级别越大优化效果越好,但编译时间越长
-Wall编译程序,同时开启警告信息

下面是我编译的f1.c文件,通过gcc将其最终编译为可执行文件f1

在这里插入图片描述
所以呢,先-E成.i文件,再-S成.s文件,再-c成.o文件,再链接成可执行文件
作为一个小白级别的懒人,觉得这个好麻烦啊~~,所以嘞,下面的方法真是懒人必备,同样的功能,但是省去了很多步骤哦。

gcc f1.c -o f1
./f1

gdb调试器的使用

gdb调试可以找到程序中的错误,调试工具为gdb。

选项功能
file装入调试的可执行文件
break设置断点
list列出产生执行文件的代码源部分
run执行当前被调试的程序
set设置变量值
print显示变量或表达式值
quit退出gdb
c继续break后的执行
bt反向追踪,显示程序堆栈
shell在gdb内部执行shell命令
make不退出gdb,重新产生可执行文件
where显示程序当前的调用栈
step执行一行代码源,但不进入程序内部

如果你要使用gdb调试器,那么在gcc的时候,需要加上-g选项

gcc -g f1.c -o f1

常见命令用法

  • list显示命令,显示多行源代码,从上次的位置开始显示,默认情况下,一次显示10行,第一次使用时,从代码起始位置显示
    list n显示以第n行未中心的10行代码
  • break断点命令
    break n,在第n行停止程序执行,进而执行相应的操作
指令含义
info break查看断点相关的信息
delete breakpoint_num根据断电号,删除断点
clear n表示清除第n行的断点
  • display命令,查看参数的值
display var_name //显示变量var_name的值
  • watch命令,可设置观察点(watchpoint)。使用观察点可以使得当某表达式的值发生变化时,程序暂停执行。

执行该命令前,必须保证程序已经运行

  • step及next命令

step可使得程序逐条执行,即执行完一条语句,然后,在下一条语句前停下来,等待用户的命令。
一般使用step命令时,可使用display或者watch命令查看变量的变化,从而判断程序行为是否符合要求。当下一条指令为函数时,s进入函数内部,在其第一条语句前停下来。
step n,next n 表示连续但不执行n条指令,如果期间遇到断点,则停下来

  • print命令,print var
  • set var_name=value ,在程序运行中动态改变变量的值

小技巧

  • 使用where命令可以帮助我们将错误定位
  • 当使用set命令调试时,需要保证,set命令的位置在断点语句之前
    譬如,当where显示我们的错误处在第7行,我们执行break 7,查看变量值发现,变量需要重新赋值,于是乎,想当然的在这里进行变量set命令,但但但,在这里请stop,由于set语句是在断点语句后进行的更改,而我们需要在错误前就杜绝了它的根呀,所以嘞,可以重设break,或者再设一个断点,再set命令,就ok啦!
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值