欢迎来到天天文库
浏览记录
ID:20434643
大小:65.86 KB
页数:7页
时间:2018-10-12
《linux操作系统环境下的c程序开发》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、西南科技大学计算机科学与技术学院实验报告实验名称Linux操作系统下C稈序设i十实验地点实验日期指导教师学生班级学生姓名学生学号提交曰期-、实验目的熟悉字符模式下的C程序编译和调试环境,基本掌握Linux字符模式下的编译工具和调试工具的使用二、实验题目Linux操作系统下C程序设计三、实验设计■练习实验指导书上的三种编译方法和过程直接编译静态庠共享库■练习实验指导书上的调试过程(写出对实验过程的设计,包括步骤、方法等)四、实验记录当前文件夹:xxoo409612月xxoo409612月xxoo13611
2、月XXOO28411月drwxrwxr-x2xxoodrwxr-xr-x7xxoo-rw-rw-r--1xxoo-rw-rw-r--1xxoo513:56./512:23"/2818:44calc.c2818:44natn.c1、直接编译xxoo@K46CM:~/桌面/ccc$gccmatn^ccalc.c,omain2、静态库将calc.c编译成中间文件calc,oxxoo@K46CM:~/桌面/ccc$gcc-ccalcic生成静态库文件,添加calc.o到静态库中,xxoo@K46CM:〜/桌面/
3、ccc$a「•「TAbcalc.acalc.o命令行中,-rlibcalc.a参数表示建立静态库,名字为libcalc.ao接下來,使用如下命令行:XXOO0K46CM卜/:面/ccc$Cjccmain.cItbcalc.a-omain-1参数可以指定库名称,这里calc表示使用库libcalc.a,库名字前面的lib和后面的.a被省略掉了,遵从了命名法。3、共享库首先,编译calc,c为calc.0,使用命令打:乂乂。0@1<46〔1^:~/杲曲/〔〔〔$gcc-c-fpiccalc.c命令行屮,_f
4、pic指定calc.o力可重分配地址属性,pic是positionindependencecode的缩写0接卜来使用calc.o生成共享库calc,so:xxoo@K46CM:~/桌面/ccc$gcc-sharedcalc*o-ocalc*so最后编译main,c,链接生成的共享座:xxoo@K46CM:~/桌面/ccc$gccnain>ccalc.so-omain4、调试过程耍完成源代码级别的调试,需耍在编译时指定将调试倍息添加到可执行文件屮,也就是说可以在调试吋看到程序的函数名、变量名等,而不是内存
5、地址。gcx命令的-g参数可以完成这个功能。例如使用如下命令:xxoo@K46CM:~/桌面/ccc$gccnatn>ccalc>c-omain-g用GDB开始凋试xxoo@K46CM:~/桌面/ccc$gdbmain这里如果没有写带有调试信息的可执行文件名时,可以再下面用filefilename显示其当前执行后面的源代码(默认含有主函数的代码):bdg(123list#includetntcalc(int);tntnain(intargc,char*argv[])加上文件名,可显示其
6、他包含的文件:(gdb)listcalc1#tnclude2tntcalc(tntUn)设置断点(此时为listmain):(gdb)break7Breakpoint2at0x400611:filemain.c,line1.(gdb)infobreakpointsNunTypeDtspEnbAddressWhat2breakpointkeepy0x0000000000400611inmainatnain.c:7开始执行:(gdb)runStartingprogram:/home/xxo
7、o/桌面/ccc/natnmainBreakpoint2,main(a「gc=2,argv=0x7fffffffdel8)atmain.c:77scanf(H%inilnput);到断点这一行,继续:(gdb)next48whtle(tlnput<0)以下继续next,直到有函数调用的这一行,step可以进入函数:13tOutput=calc(tlnput);(gdb)stepcalc(tln=5)atcalc乂:44inti=0,tout=0;此时可以一直step/nextK去直到函数调用完成,或者r
8、eturn直接返冋主函数:(gdb)returnMakecalcreturnnow?(yorn)y#00x000000000040065atnmain(argc=2,argv=0x7fffffffdel8)atnain*c:1313tOutput=calc(tlnput);在调试中可以杳看某个变量的值:(gdb)printtlnput$1=5也讨以改变其值:(gdb)setvariabletlnput=llll(gdb)printtlnpu
此文档下载收益归作者所有