实验四LINUX下C语言使用、编译与调试实验.doc

上传人:wux****ua 文档编号:8798418 上传时间:2020-04-01 格式:DOC 页数:8 大小:59KB
返回 下载 相关 举报
实验四LINUX下C语言使用、编译与调试实验.doc_第1页
第1页 / 共8页
实验四LINUX下C语言使用、编译与调试实验.doc_第2页
第2页 / 共8页
实验四LINUX下C语言使用、编译与调试实验.doc_第3页
第3页 / 共8页
点击查看更多>>
资源描述
实验四:LINUX 下C语言使用、编译与调试实验一、目的:1、 练习并掌握Linux提供的vi编辑器来编译C程序2、 学会利用gcc、gdb编译、调试C程序3、 学会使用make工具二、内容1、 编写C语言程序,用gcc编译并观察编译后的结果,运行生成的可执行文件。2、 利用gdb调试程序。3、 学习编写makefile,并进行编译。三、操作1、文件编辑器vi 进入vi,直接执行vi编辑程序。例:# vi test.c显示器出现vi的编辑窗口,同时vi会将文件复制一份至缓冲区(buffer)。vi先对缓冲区的文件进行编辑,保留在磁盘中的文件则不变。编辑完成后,使用者可决定是否要取代原来旧有的文件。1) vi的工作模式(1)输入模式输入以下命令即可进入vi输入模式:a 在光标之后加入资料A 在该行之末加入资料i在光标之前加入资料I 在该行之首加入资料o新增一行于该行之下O新增一行于该行之上(2)命令模式在输入模式下,按ESC可切换到命令模式。命令模式下,可选用下列指令离开vi:q!离开vi,并放弃刚在缓冲区内编辑的内容:wq将缓冲区内的资料写入磁盘中,并离开viZZ同wq:x同wq:w将缓冲区内的资料写入磁盘中,但并不离开vi:q离开vi,若文件被修改过,则要被要求确认是否放弃修改的内容,此指令可与:w配合使用(3)命令模式下光标的移动 h左移一个字符j下移一个字符k上移一个字符l右移一个字符0(零)移至该行的行首$移至该行的行尾移至该行的第一个字符处H移至窗口的第一行M移至窗口中间那一行L移至窗口的最后一行G移至该文件的最后一行W, w下一个单词 (W 忽略符号)B, b上一个单词 (B 忽略符号)(4) 命令模式下的编辑命令dd删除当前光标所在行yy复制当前光标所在行p将复制的内容粘贴在光标所在的位置后P将复制的内容粘贴在光标所在的位置前x删除当前光标字符X删除当前光标之前字符u撤消重做2、GNU C编译器1) 使用gcc通常后跟一些选项和文件名来使用gcc编译器。gcc命令的基本用法如下: gcc options filenames命令行选项指定的编译过程中的具体操作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# ./count4) 例子mypow.c:定义mypow()函数unsigned long long mypow(unsigned int x, unsigned int y) unsigned long long res=1; if (y=0) res = 1; else if (y=1) res = x; else res = x * mypow(x, y-1); return res;powtest.c:调用mypow()函数#include #include int main(int argc, char *argv) unsigned int x, y; unsigned long long res; if (argc3) | (sscanf(argv1, %u, &x) != 1 | (sscanf(argv2, %u, &y) != 1 ) printf(Usage:pow base exponentn); exit(1); res = mypow(x, y); printf(%u %u = %un, x, y, res); return 0;编译过程:# gcc -c mypow.c# ar rcsv libpow.a mypow.oa - mypow.o# gcc -o powtest powtest.c -L. -lpow# ./powtestUsage:pow base exponent# ./powtest 2 102 10 = 10243、gdb调试工具1) 调试编译代码为了使gdb正常工作,必须使你的程序在编译时包含调试信息。调试信息里包含你程序里的每个变量的类型和在可执行文件里的地址映射以及源代码的行号。gdb利用这些信息使源代码和机器码相关联。在编译时用 g 选项打开调试选项。2) gdb基本命令命 令描 述file装入欲调试的可执行文件kill终止正在调试的程序list列出产生执行文件的源代码部分next执行一行源代码但不进入函数内部step执行一行源代码并进入函数内部run执行当前被调试的程序quit终止gdbwatch监视一个变量的值而不管它何时被改变break在代码里设置断点,使程序执行到这里时被挂起make不退出gdb就可以重新产生可执行文件shell不离开gdb就执行UNIX shell 命令3) 调试程序(1) 源程序gdbtest1.c,分析程序的功能,如果出错,要求用gdb进行调试并给出修改方案。基本步骤: 编译:gcc -g -o gdbtest1 gdbtest1.c 运行:./gdbtest1 开始调试:gdb gdbtest1 #include int add_range(int low, int high) static int i,sum; for(i=low; i=high; i+) sum = sum +i; return sum;int main(void) int result100; result0 = add_range(1,10); result1 = add_range(1,100); printf(result0=%dnresult1=%dn,result0,result1); return 0;(2) 源程序greet.c,功能:按照正序和逆序输出给定的字符串。要求用gdb进行调试,分析出错的原因并给出修改方案。#include #include #include void my_print (char *string);void my_print2 (char *string);int main() char my_string = hello there; my_print (my_string); my_print2 (my_string); return 0; void 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 + 1); for (i = 0; i size; i+) string2size - i = stringi; string2size + 2 = 0; printf (The string printed backward is %sn, string2);4、make的使用(1)用vi编辑以下程序,程序清单: main.cfunction1.hfunction1.cfunction2.hfunction2.c/main.c#include function1.h#include function2.h int main(int argc, char *argv)function1_print(hello);function2_print(world);return 0;/function1.h void function1_print(char *str); /function1.c #include function1.hvoid function1_print(char *str)printf(This is function1 print %sn, str);/function2.hvoid function2_print(char *str); /function2.c #include function2.hvoid function2_print(char *str)printf(This is function2 print %sn, str);实验要求:(1)画出各个源程序、目标文件以及最终的目标文件之间的依赖关系图。(2)编辑makefile文件(3)利用make命令进行上述程序的编译,生成可执行代码并运行。(4)修改其中一个源文件,重新make,察看编译过程。(5)通过使用makefile变量和隐含规则,对makefile文件进行简化四试验总结写出详细的试验过程及其试验结果。
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 大学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!