Linux环境下的GCC编译器与GDB调试工具介绍

摘要:
假如现在我们有如下代码需要编译运行和调试。",sum);return0;}1、GCC编译器介绍在使用GCC编译器时,需要给出一些列的调用参数,其基本的调用格式如下:gcc[options][filenames]其中options就是GCC所需的参数,filenames便是要编译的文件名options的常用的参数有:-C:只编译,不链接生成可执行文件。输入.c等源代码文件,输出.o为后缀的目标文件。与print不同的是程序每步运行都会显示表达式的值。

假如现在我们有如下代码需要编译运行和调试。文件名为:test.c

#include <stdio.h>
int main()
{
	int day, month, year, sum, leap;
	printf("input year month day:
");
	scanf("%d%d%d",&year,&month,&day);
	switch(month)
	{
		case 1: sum = 0; break;
		case 2: sum = 31; break;
		case 3: sum = 59; break;
		case 4: sum = 90; break;
		
		//case 5: sum += 90; break;
		//case 6: sum += 90; break;
		//case 7: sum += 90; break;
		//case 8: sum += 90; break;
	}
	sum += day;
	if(year%400==0 || (year%4==0 && year%100!=0))
	{
		leap = 1;
		
	}
	else{
		leap = 0;	
	}
	if(leap == 1 && month>2)
	{
		sum++;
	}
	printf("it is the &dth day!
",sum);
	return 0;
}

1GCC编译器介绍

在使用GCC编译器时,需要给出一些列的调用参数,其基本的调用格式如下:

gcc [options] [filenames]

其中options就是GCC所需的参数,filenames便是要编译的文件名

options的常用的参数有:

-C :只编译,不链接生成可执行文件。输入.c等源代码文件,输出.o为后缀的目标文件。通常用于编译不包含主程序的子程序文件。

-o output_filename:确定输出文件的名称为output_filename,并且这个名称不能与源文件同名。默认情况下为:a.out

-g : 产生符号调试工具所必须的符号信息。若想对源代码进行调试,就需要加入该选项

-O对程序进行优化编译、链接。

-O2-O更好的优化编译、链接,但整个编译和链接过程会比较慢。

其中比较常用的编译代码的命令:(-Wall能够使得GCC产生尽可能多的警告信息)

gcc -Wall test.c -o test

运行代码的命令为:(test是上面生成的目标文件test)

./test


2GDB调试工具介绍

1) 在使用GDB编译程序时必须要让GDB可以获得程序的信息,故而需要在编译时加入参数-g,编译命令如下:

gcc -g -o可执行文件名 源文件名

如:gcc -g -o test test.c

2) 在生成带有调试信息的可执行文件后,可使用如下命令加载可执行程序到GDB调试工具中

gdb 可执行文件

如:gdb test

当然也可以先输入gdb命令,然后在输入命令:

file 可执行文件名

如:file test

3) 在进入调试工具GDB后,可以使用break命令设置断点,如:

break line5 //运行到第五行停止

break function1 //运行到函数function1后停止

break line/function if xx //符合if条件时,运行到指定位置

4) 在程序运行到第一个断点停止后,可以对接下来的代码进行单步跟踪,使用命令:

step

当然也可以使用continue命令继续运行程序,使得程序运行至下一个断点或运行完成。

5) 在逐步追踪的过程中,可以使用如下命令查看变量值:

print 变量名/表达式

print $ //表示输出当前序号的前一个序号的值

print $$ //表示输出当前序号向前第二个序号

假如当前序号为3,则print $ 表示输出序号为2中的数据,print $$ 输出序号为1中的数据。

print还可用户给变量赋值和打印连续的空间

print var = 5 //给变量var赋值为5

print 开始表达式@连续空间大小 //printarr[2]@5

6) display用户显示表达式的值。与print不同的是程序每步运行都会显示表达式的值。

若想使display暂时不能显示可以使用命令:

disable display

恢复display命令为:

enable display

直接删除display命令为:

delete display [显示数据的序号]

当设置的程序断点不再需要暂停运行时,可以使用deleteclear命令清除断点,二者的区别在于:

delete 断点编号

clear 断点所在行号

显示代码使用命令list

list[+] :显示当前行后面的代码

list-:显示当前行前面的代码

list n: 显示程序第n行周围的代码

list function: 显示函数名为function的功能函数代码

list first, last: 显示第first行代码到last行代码

list , last:显示从当前行到last行之间的代码

list filename:n :显示文件filename的第n行代码

list filename:function:显示文件名为filename中的函数名为function的函数代码

set listsize count :设置list显示的行数为count

show listsize: 查看当前源代码的显示行数

参考文献:

明日科技,linux C 从入门到精通, 清华大学出版社, 2012.12

免责声明:文章转载自《Linux环境下的GCC编译器与GDB调试工具介绍》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇PHP面试题详解Javascript设计模式(摘译)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

suse 下的gcc安装

在付出了一天的努力之后终于在win7系统上面硬盘安装suse操作系统成功,可是随之而来的问题居然是没有安装GCC,这对我来说是一个不小的打击,因为很多工作和工具安装需要通过GCC来编译,因此我只好求助于百度,搜索了各种攻略,现在把我安装成功的经验分享一下。 因为suse里面本身没有cc的编译工具,所以使用 gcc-4.4.2.tar.bz2这种方式安装的报...

makefile初步制作,arm-linux- (gcc/ld/objcopy/objdump)详解

在linux中输入vi Makefile 来实现创建Makefile文件 注意:命令行前必须加TAB键 例如:将两个文件led.c和crt0.S汇编文件,制作一个Makefile文件 1 1led.bin : crt0.S led.c 2 2 arm-linux-gcc -c -o crt0.o crt0.c 3 3 arm-linux-gcc -c...

嵌入式Linux应用程序开发

1.Linux成员命令的使用。 切换超级用户:su 例:su - root 用户管理:useradd:添加用户账号 passwd:设置账号密码 例:useradd liu;passwd liu 显示进程:ps:显示当前用户运行进程列表 例:ps -ef 杀死进程:kill:输出特定的信号给特定的PID(进程号) 例:kill -9 7421(kill -9...

linux安装python3

--linux安装python3 centos系统本身默认安装有python2.x,可通过python --version 查看系统自带的python版本,有一些系统命令需要用到python2,安装python3时不能卸载python2。 1、安装依赖包                                                   ...

通过yum升级gcc/g++至版本4.8.2

最近在坐一个日期处理的问题,需要安装sxtwl模块,但是gcc版本4.7死活也安装不上,最后测试到只能升级gcc版本到4.8才得以解决 [root@123 bin]# gcc -vUsing built-in specs.Target: x86_64-redhat-linuxThread model: posixgcc version 4.4.7 2012...

【C++11】准备:gcc 4.9.0编译安装

C++14都粗来了,现在才学C++11?是的,学习主动性太差了,我检讨。之前看过几眼,但没有机会应用到工作中,上家公司的环境是HP-UX,现在的开发环境还是古老的VS2008。所以一直没有用过,现在打算来练练手。 VS2013不知什么原因,每次新建项目点击完成以后就会崩溃,安装卸载了几个回合依然如此。所以放弃windows平台,安装虚拟机、ubuntu 1...