操作系统实验12C编程与调试

上传人:博****1 文档编号:508893655 上传时间:2023-06-23 格式:DOCX 页数:10 大小:199.67KB
返回 下载 相关 举报
操作系统实验12C编程与调试_第1页
第1页 / 共10页
操作系统实验12C编程与调试_第2页
第2页 / 共10页
操作系统实验12C编程与调试_第3页
第3页 / 共10页
操作系统实验12C编程与调试_第4页
第4页 / 共10页
操作系统实验12C编程与调试_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《操作系统实验12C编程与调试》由会员分享,可在线阅读,更多相关《操作系统实验12C编程与调试(10页珍藏版)》请在金锄头文库上搜索。

1、实验二C编程与调试(一) 实验目的学会和掌握C语言开发一个应用程序的全过程,包括编辑、编译、调试过程。(二) 实验器材linux平台。(三) 实验内容1.使用gcc编译一个示例程序。方法一:Linux下编写C程序一般要经过的步骤。(1) 启动常用的编辑器,输入C源程序代码。在自己的主文件夹下,右击“创建文档” -“空文档”,或者单击“主菜单”-“附件”-“文本编辑器”,进入文本编辑环境,输入C源程序, 保存并命名为hello.c。注:如果是复制代码的话,要改“”符号的格式,否则会报错。#includevstdio.hint main(void)printf(Hello world!n);ret

2、urn 0;(2) 编译源程序。在自己的主文件夹下,单击“主菜单”-“系统工具”-终端,进入命令行。 用GCC编译器对C源程序进行编译,以生成一个可执行文件。方法如下:gcc -o hello hello.c运行程序,输入如下命令:./hello诵ylnjlao文件编辑 查看6位置帮助竝文件 编辑 查看 携索 工具 文档帮助hellohello.cDesktopSi文件 编辑()查看 终端工)标签帮助 yinJiaoYouYou S gcc o hello hello.cyinjiaoYouYou ./helloHello world!yinjiaoaYouYou S 目ISXL.j/Lft新

3、建打开保存打印撤消重做粘贴0 hello.c k#include int main(void)printf (Hello world !nH);return 0;方法二:编译过程分成几个步骤单独进行,并观察每步的运行结果。(1)预处理阶段,使用-E参数可以让GCC在预处理结束后停止编译过程:gcc -E hello.c -o hello.i预处理结束后,stdio.h的内容将插入到文件里,其他当被预处理的宏定义也都做了相应的处 理。(2)编译阶段gcc -S hello.i -o hello.s上述命令将代码翻译成汇编语言。(3) 汇编阶段,将生成的.s文件转成.0的二进制目标文件。gcc -

4、c hello.s -o hello.o(4) 连接阶段在成功编译后,就进入了连接阶段。gcc hello.o -o hello完成连接后,gcc就可以生成可执行文件,运行程序,输入如下命令:./helloyfnjlaohellohello.chello.ihello.0hello.s:GB yinji4.oniYoLiL;)u S gcc he 1 la . -o he o yinjti.oYoLiL-:)Li -: Q如果整个程序是由多个源文件组成的,相应地也就形成了多个编译单元。假设有一个由fool.c和foo2.c两个源文件组成的程序,为了对它们进行编译,并最终生成可执行程序foo,

5、可以使用下面这条命令:gcc fool.c foo2.c -o foogcc总体选项列表后缀名所对应的语言-c只是编译不链接,生成目标文件“ .0”-S只是编译不汇编,生成汇编代码-E只进行预编译,不做其他处理-g在可执行程序中包含标准调试信息-o file把输出文件输出到file里-v打印出编译器内部编译各过程的命令行信息和编译器的版本-I dir在头文件的搜索路径列表中添加dir目录-L dir在库文件的搜索路径列表中添加dir目录-static链接静态库-llibrary连接名为library的库文件2使用gcc发现程序错误。警告和出错选项-pedantic允许发出ANSI C标准所列的

6、全部警告信息。-Wall允许发出Gcc提供的所有有用的报警信息。-Werror把所有的警告信息转化为错误信息,并在警告发生时终止编译过程。illcode.c程序如下:注:如果是复制代码的话,要改“”符号的格式,否则会报错。#includevstdio.hvoid main(void)long long int var=1printf(“It is not standard C coden);编译时加-pedantic选项。gcc -pedantic illcode.c -o illcodeillcode.c:In function main;illcode.c:4:warning:ISO C8

7、9 does not support long longillcode.c:3 warning: return type of mainis not int编译时加-Wall选项。gcc -Wall illcode.c -o illcodeillcode.c:3 warning: return type of mainis not intillcode.c:In function main;illcode.c:4:warning:unused variable varyinjiaoaYoLiYoLi -S gcc TT& : : t 1 Icacc , c -a i 1 Icocc|#incL

8、udet: zadc . j : i :警吉:main1 的返回类型不是 inivoid main (void)i 1 1 code . : I n Ilin; L L :)n ntain? :t 1 1 cade . : 5 :谱误:expec Led : ar 7 before prim I Kong Long int va r=li. ; : 4 :警吉:未使用的变量 varprintf ( 11 is not standa rd C coden) yin jiaoaYauYcjLi *11 编译时加-werror选项。gcc -Wall -Werror illcode.c -o ill

9、codeccl: warnings being treated as errorsillcode.c:3 warning: return type of mainis not intillcode.c:In function main;illcode.c:4:warning:unused variable var#include void main(void)long long int var=lpintf(It is not stands rd 匚 coden);yinjiaoaYouYou gcc -Wall -Werror illcode.c -o illcode1J warnings

10、being treatEd as errorsillcode.c 警告:main:,的返回类型不是int,illcode.c - In function Aiai门illcode.c -5;错误:expected ; or before printf?illcode.c 4:警告;未使用的变量var3yinJiaoYouYou 3.使用gdb调试一个示例程序。gdb是一个用来调试C和C+程序的强力调试器。它使你能在程序运行时观察程序的内 部结构和内存的使用情况。greetings程序如下:注:如果是复制代码的话,要改“ ”符号的格式,否则会报错。#includevstdio.h#include

11、vstring.h#includevmalloc.hvoid my_print(char *string)printf(The string is %sn,string);void my_print2(char *string)char *string2;int size, i;size=strlen(string);string2=(char *)malloc(size+l);for(i=0; isize; i+)string2size-i=stringi;string2size+i=0;printf(The string printed backward is %sn,string2);m

12、ain()char my_string=hello there;my_print(my_string);my_print2(my_string);(1) 编译程序gcc -g greeting.c -o greeting在GDB的手册里说gcc的-g选项是必须要加的,因为-g可以产生debugging information,在GDB运行的时候要用到它。否则,调试时会出现“No symbol table is loaded ”的提示了。(2) 执行程序显示结果./greetingThe string is hello thereThe string printed backward is可见,

13、输出的第一行是正确的,但第二行打印出的东西并不是我们所期望的.我们所设想的输出 应该是:The string printed backward is !ereht olleh 程序没能倒序输出。(3)由于某些原因,my_print2函数没有正常工作让我们用gdb看看问题究竟出在哪儿, 先键入如下命令:A.输入如下命令,就进入gdb软件中了,如果想退出来,在(gdb)后面输入quitgdb greetingyinjtacniY:)uL:JLi J毎 gdb grcc I i ngiMU g-Jb (GDBJ Red Elat Enlrprise Linux (7 . i. 1 -23 .c 15

14、 JCopyright :C 2009 Free Sof Lwarc FoLiniii-.ti)n . I nc .iccnse GFLv-3-i-: iXl GFt. irsion 3 ar i.L;r This is -cc soft wart : you arc -cc Ln change and rcdtslribuLi it .There is YO ftARE? Ml . Lo ihe extent permit Ld by la. Type H show copying and show warranly or de li-.i Is.This (jDB was conigured as i-386-rGdhi-.L-l inux-nn .For bug rcporling instruc Lions . pcase sec:.Resci

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号