实验4 编译和调试工具的使用-2014
- 格式:doc
- 大小:42.00 KB
- 文档页数:5
《C语⾔程序设计》实验报告(实验1-12)《C语⾔程序设计》实验报告2013~2014学年第⼆学期班级姓名学号指导教师实验⼀实验项⽬名称:C程序的运⾏环境和运⾏C程序的⽅法所使⽤的⼯具软件及环境:Visual C++ 6.0⼀、实验⽬的:1.了解在Visual C++ 6.0环境下如何编辑、编译、连接和运⾏⼀个C程序;2.通过运⾏简单的C程序,初步了解C源程序的特点。
⼆、预习内容:教材《C语⾔程序设计教程》第1章。
三、实验内容:1. 在Visual C++ 6.0环境下输⼊并运⾏下⾯的程序:#includeint main( ){printf("This is a C program.\n");return 0;}2. 在Visual C++ 6.0环境下输⼊下⾯的程序(有语法错误),编译、连接、调试该程序,直⾄程序⽆语法错误,然后运⾏程序,并观察分析运⾏结果。
#includeint main( ){int a,b,suma=3;b=4;sun=a+b;print(“%d+%d=%d\n”,a,b,sum);return 0;}四、实验结果:1. 运⾏结果(或截图):This is a C program.Press any key to continue2. (1) 改正后的源程序:#includeint main( ){int a,b,sum;a=3;b=4;sum=a+b;printf("%d+%d=%d\n",a,b,sum);return 0;}(2) 运⾏结果(或截图):3+4=7五、思考题:1. ⼀个C程序上机的步骤有哪些?答:上级输⼊与编辑源程序—对原程序进⾏编译–与库函数链接–运⾏可执⾏的⽬标程序。
2. 组成C程序的基本单位是函数,⼀个函数包括哪⼏个部分?答:⼀个函数包括两部分:分别为函数头或函数⾸部和函数体。
成绩指导教师签名实验⼆实验项⽬名称:数据类型、运算符和表达式所使⽤的⼯具软件及环境:Visual C++ 6.0⼀、实验⽬的:1.掌握整型、实型与字符型这三种基本类型的概念;2.掌握常量及变量的使⽤⽅法;3. 掌握基本算术运算符及其表达式的使⽤⽅法;4. 掌握++、--运算符、赋值运算符及其表达式的使⽤⽅法。
实验一熟悉使用调试工具软件DEBUG实验一熟悉使用调试工具软件debug实验一熟悉调试工具软件调试编写汇编语言时,如果源程序中存在语法或格式上的错误,在汇编和链接过程中都可以被发现并得以纠正。
但是如果在源程序中存在逻辑错误时,就只能通过调试来纠正了。
常用的调试工作软件是debug。
debug提供了修改寄存器和内存单元内容的命令,可以方便地修改寄存器及内存单元的内容,为调试和修改程序带来的方便。
1.调试启动在windows环境下,点击开始栏里的运行窗,输入debug。
2、debug的主要命令这里只介绍几个常用的调试命令。
有关其他命令,请参阅相关文献。
1)r命令R命令用于查看和修改寄存器的值。
在提示符“-”下输入命令r,debug将会显示出当前所有寄存器和标志位的状态。
在r后输入相关寄存器名称,以修改相关寄存器值。
2) D命令d命令作用:显示内存区域的内容。
在提示“-”时执行命令d,以观察当前存储单元的内容。
用命令d显示内存区域的内容时,最左边是内存的起始地址,中间以十六进制的形式显示内存值,最右边是以ascii码的形式显示内存值。
每行最多显示16个字节的内容。
命令D可以接受或忽略参数。
当调试启动时,将DS的值设置为X。
当省略该参数时,命令d的显示内容从X:100开始,每次显示128字节。
将来在没有参数的情况下执行命令d时,debug将根据最后一个位置继续显示。
带参数时debug能够显示指定地址范围的内容。
带参数的方式有三种:方式一:d[起始位置]。
debug从起始位置开始显示128个字节的内容。
在提示符“-”下执行命令d1af5:100。
观看命令执行结果。
模式二:D[开始位置][结束位置]。
调试从开始位置开始,并一直显示到结束位置。
在提示“-”时执行DDS:1001ff命令。
观察命令执行结果。
方法3:D[起始位置][l长度],长度由l参数标记。
Debug显示从起始位置开始的指定长度的内容。
在提示“-”时执行DDS:100l10命令。
掌握代码编辑器中的代码调试工具的使用方法代码调试是软件开发过程中必不可少的一环。
通过调试工具,开发者可以逐步执行代码,观察变量值,查找错误,并将其修复。
在本文中,将介绍一些常见的代码调试工具及其使用方法。
一、断点调试断点调试是最常用的调试方式之一。
在代码编辑器中设置断点,程序会停在断点位置,开发者可以逐行执行代码并观察变量值。
以下是如何使用断点调试的一般步骤:1. 打开代码编辑器,并选择需要调试的代码文件。
2. 在合适的位置设置断点。
通常,可以在代码行号的左侧单击鼠标左键来设置断点。
3. 运行程序,程序会在断点处停下来。
4. 使用调试工具提供的控制按钮,例如“继续”、“下一步”、“步入”等,来逐步执行代码。
5. 在每个断点处观察变量的值,并与预期结果进行比较。
6. 如果发现问题,可以通过查看变量值、栈跟踪等信息来定位错误。
二、监视表达式监视表达式是调试中另一个重要的工具。
开发者可以通过监视表达式来观察特定变量、表达式或函数的值。
以下是如何使用监视表达式的一般步骤:1. 打开代码编辑器,并选择需要调试的代码文件。
2. 在调试工具的监视窗格中添加要监视的表达式。
通常,可以右键单击变量或表达式,然后选择“添加到监视”。
3. 运行程序并观察监视表达式的值变化。
可以根据需要继续执行代码,或者在特定断点处停下来。
4. 如果监视表达式的值与预期结果不符,可以进一步检查代码并找出问题所在。
三、日志输出日志输出是一种简单但有效的调试方法。
通过在代码中插入日志语句,在程序执行过程中将变量值或特定消息输出到日志文件或控制台。
以下是如何使用日志输出的一般步骤:1. 打开代码编辑器,并选择需要调试的代码文件。
2. 在需要观察的位置插入日志语句。
例如,可以使用语言提供的日志库或简单的打印语句。
3. 运行程序,并观察生成的日志文件或控制台输出。
4. 根据日志信息判断程序行为是否符合预期,如有必要,可以继续添加或修改日志语句以获取更详细的信息。
C语言的编译器与调试器使用在学习和开发C语言程序时,编译器和调试器是我们必不可少的工具。
编译器负责将源代码转换为机器代码,而调试器则用于调试和解决程序中的bug。
本文将介绍C语言编译器和调试器的使用方法和技巧。
1. C语言编译器1.1 编译器的作用编译器是一个将高级语言(如C语言)源代码转换为低级语言(如汇编语言或机器代码)的工具。
它执行词法分析、语法分析和代码生成等操作,最终生成可执行文件或目标文件。
1.2 常用的C语言编译器•GCC:GNU C Compiler是一个开源的C语言编译器,被广泛用于多种操作系统和平台。
•Clang:是一个基于LLVM的C语言编译器,具有良好的性能和代码生成优化。
•Visual Studio:是微软公司开发的IDE,内置了C和C++编译器。
1.3 编译C程序的步骤编译C程序的主要步骤包括:预处理、编译、汇编和链接。
1. 预处理:将源代码中的宏定义、条件编译等处理成标准的C代码。
2. 编译:将预处理后的C代码转换为汇编语言。
3. 汇编:将汇编代码转换为机器代码。
4. 链接:将多个目标文件连接成可执行文件。
2. C语言调试器2.1 调试器的作用调试器是一种用于调试程序的工具,可以帮助我们找出程序中的bug并进行修复。
它提供了断点设置、变量查看、单步执行等功能,方便我们逐步调试程序。
2.2 常用的C语言调试器•GDB:GNU Debugger是一个强大的开源调试器,支持多种编程语言,包括C语言。
•LLDB:是一个基于LLVM的调试器,具有与GDB相似的功能。
•Visual Studio Debugger:在Visual Studio IDE中集成了强大的调试功能,方便开发者进行程序调试。
2.3 调试C程序的基本操作调试C程序的基本操作包括设置断点、运行程序、查看变量值、单步执行等。
1. 设置断点:在程序中设置断点,当程序执行到该断点时会暂停执行。
2. 运行程序:启动调试器运行程序,可以逐步执行代码或在断点处停下来。
实验一系统认识实验实验目的掌握TD-PITE 80X86 微机原理及接口技术教学实验系统的操作,熟悉Wmd86联机集成开发调试软件的操作环境。
实验设备PC机一台,TD-PITE 实验装置一套。
实验内容编写实验程序,将00H~0FH 共16 个数写入内存3000H 开始的连续16 个存储单元中。
实验步骤1. 运行Wmd86 软件,进入Wmd86 集成开发环境。
2. 根据程序设计使用语言的不同,通过在‚设置‛下拉列表来选择需要使用的语言,如图1-1-1所示。
语言选择后,下次再启动软件,语言环境保持这次的修改不变。
在这里,我们选择汇编语言。
图1-1-1 语言环境选择界面3. 语言选择后,点击新建或按Ctrl+N 组合键来新建一个文档,如图1-1-2所示。
默认文件名为Wmd861。
图1-1-2 新建文件界面4. 编写实验程序,如图1-1-3所示,并保存,此时系统会提示输入新的文件名,输完后点击保存。
图1-1-3 程序编辑界面5. 点击,编译文件,若程序编译无误,则输出如图1-1-4所示的输出信息,然后再点击进行链接,链接无误输出如图1-1-5所示的输出信息。
图1-1-4 编译输出信息界面图1-1-5 链接输出信息界面6. 连接PC与实验系统的通讯电缆,打开实验系统电源。
7. 编译、链接都正确并且上下位机通讯成功后,就可以下载程序,联机调试了。
可以通过端口列表中的‚端口测试‛来检查通讯是否正常。
点击下载程序。
为编译、链接、下载组合按钮,通过该按钮可以将编译、链接、下载一次完成。
下载成功后,在输出区的结果窗中会显示‚加载成功!‛,表示程序已正确下载。
起始运行语句下会有一条绿色的背景。
如图1-1-6所示。
图1-1-6 加载成功输出显示界面8. 将输出区切换到调试窗口,使用D0000:3000命令查看内存3000H 起始地址的数据,如图1-1-7所示。
存储器在初始状态时,默认数据为CC。
图1-1-7 内存地址单元数据显示9. 点击按钮运行程序,然后再点击来停止程序运行,接下来观察程序运行结果,仍使用命令D0000:3000 来观察数据变化。
实验说明一.软件开发环境配置1. 参考资料●Keil 仿真环境安装与使用●C8051F310EVM使用指南●C8051F31X.PDF2.安装包3. 软件安装3.1 Keil 仿真软件安装见“Keil 仿真环境安装与使用”3.2 安装驱动:SIC8051F-Uvision-Driver.exe3.3 安装配置向导CONFIGAND Config21install.exe说明:1)完成3.1后,可以在PC上进行软件仿真调试。
2)完成3.2后可以通过PC机对单片机进行硬件调试。
3)完成3.3后,可以通过“配置向导”很方便地产生C8051F310器件初始化代码,即为运行用户程序准备必要的MCU硬件环境。
(如配置sysclk,WDT状态,Crossbar状态,Port状态)提示:软件包应安装在相同的目录下。
二.操作1.1 . Keil 仿真软件安装后按照“Keil 仿真环境安装与使用”进行软件仿真。
1.2. 安装驱动SIC8051F-Uvision-Driver.exe进行配置(见Keil 仿真环境安装与使用)2. 安装配置向导CONFIGAND Config21install.exe安装后利用Configuration Wizard2 自动生成器件初始化代码注意:WDT, PORT, TIMER的初始化配置也可以在配置向导完成。
2.1 新建工程,点击Configuration WizardsFile—New---C8051F310----OK2.2 选择文件格式Options/code format /asm2.3 关闭看门狗WDT关看门狗,Peripherals/PCA/Module 4/WDT, 关Enable watchdog Timer2.4 系统时钟选择Peripherals/ Oscilators,Internal oscillator enable2.5 定时器Time 时钟选择(Time0:16位定时,定时时钟=sysclk/48)2.6 端口配置●Port 必须配置为数字型引脚,如P0,P3配置为数字引脚●Port 作为输出口使用时需配置为push-pull模式●保证Port 口能够正常使用,必须使能Crossbar2.7 中断配置配置完成后生成文件* .cwg;------------------------------------;- Generated Initialization File --;------------------------------------$include (C8051F310.inc)public Init_DeviceINIT SEGMENT CODErseg INIT; Peripheral specific initialization functions, ; Called from the Init_Device labelTimer_Init:mov TMOD, #001hretPort_IO_Init:; P0.0 - Unassigned, Open-Drain, Digital ; P0.1 - Unassigned, Open-Drain, Digital ; P0.2 - Unassigned, Open-Drain, Digital ; P0.3 - Unassigned, Open-Drain, Digital ; P0.4 - Unassigned, Open-Drain, Digital ; P0.5 - Unassigned, Open-Drain, Digital ; P0.6 - Unassigned, Open-Drain, Digital ; P0.7 - Unassigned, Open-Drain, Digital; P1.0 - Unassigned, Open-Drain, Digital ; P1.1 - Unassigned, Open-Drain, Digital ; P1.2 - Unassigned, Open-Drain, Digital ; P1.3 - Unassigned, Open-Drain, Digital ; P1.4 - Unassigned, Open-Drain, Digital ; P1.5 - Unassigned, Open-Drain, Digital ; P1.6 - Unassigned, Open-Drain, Digital ; P1.7 - Unassigned, Open-Drain, Digital ; P2.0 - Unassigned, Open-Drain, Digital ; P2.1 - Unassigned, Open-Drain, Digital ; P2.2 - Unassigned, Open-Drain, Digital ; P2.3 - Unassigned, Open-Drain, Digitalmov XBR1, #040hretInterrupts_Init:mov IT01CF, #010hmov IE, #086hret; Initialization function for device,; Call Init_Device from your main programInit_Device:lcall Timer_Initlcall Port_IO_Initlcall Interrupts_Initretend在此基础上加上仿真后的程序;------------------------------------;- Generated Initialization File --;------------------------------------$include (C8051F310.inc)ORG 0000HRESET: LJMP MAINORG 000BHLJMP L1ORG 1000HMAIN: lcall Init_Device;加上编写好的程序段public Init_DeviceINIT SEGMENT CODErseg INIT; Peripheral specific initialization functions, ; Called from the Init_Device labelPCA_Init:anl PCA0MD, #0BFhmov PCA0MD, #000hretTimer_Init:mov TMOD, #001hmov CKCON, #002hretPort_IO_Init:; P0.0 - Unassigned, Open-Drain, Digital ; P0.1 - Unassigned, Open-Drain, Digital ; P0.2 - Unassigned, Open-Drain, Digital ; P0.3 - Unassigned, Open-Drain, Digital ; P0.4 - Unassigned, Open-Drain, Digital ; P0.5 - Unassigned, Open-Drain, Digital ; P0.6 - Unassigned, Open-Drain, Digital ; P0.7 - Unassigned, Open-Drain, Digital; P1.0 - Unassigned, Open-Drain, Digital ; P1.1 - Unassigned, Open-Drain, Digital ; P1.2 - Unassigned, Open-Drain, Digital ; P1.3 - Unassigned, Open-Drain, Digital ; P1.4 - Unassigned, Open-Drain, Digital ; P1.5 - Unassigned, Open-Drain, Digital ; P1.6 - Unassigned, Open-Drain, Digital ; P1.7 - Unassigned, Open-Drain, Digital ; P2.0 - Unassigned, Open-Drain, Digital ; P2.1 - Unassigned, Open-Drain, Digital ; P2.2 - Unassigned, Open-Drain, Digital ; P2.3 - Unassigned, Open-Drain, Digitalmov XBR1, #040hretInterrupts_Init:mov IT01CF, #010hmov IE, #086hret; Initialization function for device,; Call Init_Device from your main programInit_Device:lcall PCA_Initlcall Timer_Initlcall Port_IO_Initlcall Interrupts_Initretend注意:1)在*.asm文件中输入以下语句将定义的SFR信息包含在源文件中$include (c8051F310.inc)2)在options for Target 窗口中取消“Define 8051 SFR Names”配置后的相关窗口信息如下:三.实验板调试及安装将实验板连接好,先接电源再接PC的USB口按照“Keil 仿真环境安装与使用”编译链接、调试程序选择‘Debug’设置调试环境点击Settings点击USB编译和链接程序文件,直到提示没有错误,单击调试,程序下载到实验板。
软件实验一汇编语言程序的调试与运行一.实验目的1.学习数据传送和算术运算指令的用法2.熟悉在PC机上编辑、汇编、连接、调试和运行汇编语言程序的过程。
二.实验内容将两个多位十进制数相加,要求被加数和加数均以ASCII码形式各自顺序存放在DATA1和DA TA2为首的5个内存单元中,结果送回DATA1处。
三.程序框图图1.1两个多位十进制相加程序流程图四.程序清单DISP MACRO XMOV DL,X;要显示的字符送DL寄存器MOV AH,02H;DOS功能调用号是02HINT21H;21H中断程序是DOS功能调用ENDMDATA SEGMENTDATA1DB'12732'DATA2DB'06815'N EQU$-DA TA2DATA ENDSSTACK SEGMENT STACKSTA DB20DUP(?)TOP EQU$-STASTACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TA,SS:STACK,ES:DA TA START:MOV AX,DA TAMOV DS,AXMOV AX,STACKMOV SS,AXMOV AX,TOPMOV SP,AXLEA SI,DA TA1;☆MOV BX,0MOV CX,NCALL DISPL;显示被加数DISP'+'LEA SI,DA TA2MOV BX,0MOV CX,NCALL DISPL;显示加数DISP'='LEA DI,DA TA1MOV CX,NCALL ADDA;调用加法子程序LEA SI,DA TA1MOV BX,0MOV CX,NCALL DISPL;显示运算结果DISP0DHDISP0AHMOV AX,4C00HINT21HDISPL PROC;显示子程序DS1:MOV AH,02HMOV DL,[SI+BX]INT21HINC BXLOOP DS1CALL DISPL;显示被加数DISP'+'LEA SI,DA TA2MOV BX,0MOV CX,NCALL DISPL;显示加数DISP'='LEA DI,DA TA1MOV CX,NCALL ADDA;调用加法子程序LEA SI,DA TA1MOV BX,0MOV CX,NCALL DISPL;显示运算结果DISP0DHDISP0AHMOV AX,4C00HINT21HDISPL PROC;显示子程序DS1:MOV AH,02HMOV DL,[SI+BX]INT21HINC BXLOOP DS1RETDISPL ENDPADDA PROC;加法子程序PUSH CXMOV BX,0AD1:SUB BYTE PTR[SI+BX],30HSUB BYTE PTR[DI+BX],30HINC BXLOOP AD1POP CXPUSH CXMOV BX,N-1;☆☆CLCAD2:MOV AL,[SI+BX]ADC AL,[DI+BX]AAAMOV[DI+BX],ALDEC BXLOOP AD2POP CXPUSH CXMOV BX,0;☆☆☆AD3:ADD BYTE PTR[DI+BX],30HINC BXLOOP AD3POP CXRET;☆☆☆☆ADDA ENDPCODE ENDSEND START2.简单叙述上机步骤,调试方法。
实习一调试工具的使用方法训练1.实验目的掌握调试工具DEBUG的使用方法,理解汇编指令、存储单元和寄存器等有关概念,能够对简单的汇编语言程序进行调试。
2.实验内容(1)学习调试工具DEBUG的使用方法,熟悉DEBUG常用命令的功能和用法。
(2)利用DEBUG调试简单的汇编语言程序,体会汇编指令的功能、寄存器的作用、存储单元地址与内容的概念和作用、以及程序的执行过程。
3.实验要求(1)掌握DEBUG的常用命令和基本的程序调试方法(2)熟悉和掌握指令系统常用指令的功能和用法,能熟练运用DEBUG调试工具调试简单的程序,并初步掌握使用DOS系统功能调用的方法。
4.重点与难点存储器和寄存器的概念、各寄存器的用途、常用指令的功能和用法、用DEBUG调试程序的方法。
5.实验结果验收熟练运用DEBUG调试工具完成实习要求的程序设计和调试6.实验指导6.1 调试工具DEBUG简介DEBUG是DOS操作系统为汇编语言程序设计者和系统管理员提供的一个通用调试工具,利用DEBUG可以读写、传送、比较、查找和显示存储器单元内容,设置程序起始执行地址或断点,执行程序或分段执行程序,跟踪程序执行,显示处理器状态,汇编或反汇编程序等。
用DEBUG编程简单、方便和直观,可以直接查看程序执行情况,便于熟悉和理解指令,掌握基本编程技巧。
DEBUG只使用十六进制表示数据(十六进制数后不加“H”),屏幕的显示数据形式如下:1400:0100 24 65 6E 64 73 0D 0A 20-20 63 6F 64 65 20 20 24 *ends..code * 1400:0110 73 65 67 6D 65 6E 74 0D-0A 20 20 20 20 20 20 24 segment.. * 1400:0170 24 61 78 2c 30 0D 0A 09-20 20 20 20 70 75 73 68 *ax,0push屏幕每行显示内容分为三部分,一行共显示十六个字节单元的内容。
实验一指令系统和编程练习实验类型:验证一、实验目的进一步掌握汇编语言设计和调试方法。
二、实验内容把7000H、7001H的低位相拼后送入7002H,一般本程序用于把显示缓冲区的数据取出拼装成一个字节。
三、实验程序框图图1 拼字实验程序框图四、实验步骤1、双击桌面上DVCC实验系统图标,在源程序文件编辑窗口编辑实验源程序。
2、设定仿真模式。
选择“选项”菜单中的“系统设置”子菜单,将仿真方式设定为内程序、内数据。
3、PC机与DVCC实验系统联机。
首先,DVCC实验系统上电,按下DVCC实验系统的红色复位按钮,在数码管显示“P.”的状态下,按下监控键盘的PCDBG键,其次,点击DVCC联机软件调试工具栏的联接按钮。
若联机通过,在软件主窗口中显示源程序文件编辑窗口、寄存器窗口及反汇编窗口,表示可以进行后续的工作,否则,提示:联机失败!重试?此时,应查找原因,直至联机通过。
4、应用联机软件中将7000H单元数据置成03H,7001H单元数据置成04H。
操作如下:(1)选择“动态调式”菜单中的“填充数据”选项,出现数据块操作对话框。
(2)在数据块操作对话框中,点击”填充”项。
方法一:在参数输入选项中,选择相同数据,将起始地址设为7000,中止地址设为7000,填充数设为03。
操作对象选择仿真RAM。
“填充”项设定完毕,点击开始按钮后点击关闭,则将7000H单元数据置成03H,采用相同的方法可设置7001H单元为04H。
方法二:在参数输入选项中,选择增量数据,将起始地址设为7000,中止地址设为7001,数据上设为03,数据下设为04。
操作对象选择仿真RAM。
“填充”项设定完毕,点击开始按钮后点击关闭,则将7000H单元数据置成03H,7001H单元数据置成04H。
5、编译实验源程序。
点击调试工具栏编译按钮,若源程序没有错误,信息窗口应提示:NO ERROR FOUND。
否则,在信息窗口中显示相应的错误说明,此时,双击信息窗口中出错说明所在行回到源程序文件编辑窗口查错,直至编译通过,没有错误信息。
实验四编译和调试工具的使用
班级:计本112 姓名:邵绪宝
学号:201106080226
三、操作
1、GNU C编译器
1) 使用gcc
通常后跟一些选项和文件名来使用gcc编译器。
gcc命令的基本用法如下:
gcc [options] [filenames]
命令行选项指定的编译过程中的具体操作
1:预处理:命令:gcc -E hello.c -o hello.i
2:编译:命令:gcc -S hello.i -o hello.s
3:汇编:命令:gcc -c hello.s -o hello.o
4:链接:命令:gcc hello.o -o hello
2) gcc常用选项
当不用任何选项编译一个程序时,gcc将建立(假定编译成功)一个名为a.out的可执行文件。
选项含义:
-o FILE 指定输出文件名,在编译为目标代码时,这一选项不是必须的。
如果FILE 没有指定,默认文件名是a.out.
例如,
# gcc test.c
编译成功后,当前目录下就产生了一个a.out文件。
也可用-o选项来为即将产生的可执行文件指定一个文件名来代替a.out。
例如:
#gcc –o count count.c
此时得到的可执行文件就不再是a.out,而是count。
-c GCC 仅把源代码编译为目标代码。
默认时GCC 建立的目标代码文件有一个.o 的扩展名。
-E 对文件进行预处理
-S 对文件进行编译,生成汇编代码。
-O 对源代码进行基本优化。
这些优化在大多数情况下都会使程序执行得更快。
-g 在可执行程序中包含标准调试信息。
-Wall 允许发出GCC 能提供的所有有用的警告,也可以用-W(warning)来标识指定的警告。
-l name链接静态库
-L dir库文件的搜索路径
3) 执行文件
格式: ./可执行文件名
例:
# ./a.out
# ./count
4) 例子
mypow.c:定义mypow()函数
powtest.c:调用mypow()函数
编译过程:
# gcc -c mypow.c
# ar rcsv libpow.a mypow.o
a - mypow.o
# gcc -o powtest powtest.c -L. -lpow
# ./powtest
Usage:pow base exponent
# ./powtest 2 10
2 ^ 10 = 1024
2、gdb调试工具
1) 调试编译代码
为了使gdb正常工作,必须使你的程序在编译时包含调试信息。
调试信息里包含你程序里的每个变量的类型和在可执行文件里的地址映射以及源代码的行号。
gdb利用这些信息使源代码和机器码相关联。
在编译时用–g 选项打开调试选项。
2) gdb
3、make的使用
(1)用vi编辑以下程序,程序清单:main.c
function1.h
function1.c
function2.hfunction1.h
function2.c
实验要求:
(1)画出各个源程序、目标文件以及最终的目标文件之间的依赖关系图。
mian依赖于main.c function1.h function2.h
function1.o依赖于function1.c function1.h
function2.o依赖于function2.c function2.h
(2)编辑makefile文件
all:main
main.o:main.c function2.h function1.h
gcc -o main mian.c
function.1o:function1.c function1.h
gcc -o function1 function1.c
function2.o: function2.c function2.h
gcc -o function2 function2.c
clean:
rm .o* main
(3)利用make命令进行上述程序的编译,生成可执行代码并运行。
make编译
(4)修改其中一个源文件,重新make,察看编译过程。
(5)通过使用makefile变量和隐含规则,对makefile文件进行简化
$SRC:main.o function1.o function2.o
main:
gcc -o main &SRC
clean:
rm main $SRC
四.试验总结
写出详细的试验过程及其试验结果。
掌握Linux提供的vi编辑器来编译C程序,用gcc、gdb编译、调试C程序,使用make工具进行编译。