实验一LinuxC编程工具GCC和GDB
Linux编译器gcc和调试器gdb
编译器gcc
-E 预处理
-S 预处理、编译
-c 预处理、编译、汇编
无-E,-S,-c 预处理、编译、汇编、链接
-o file 制定生成的结果存放到file
-g 在可执行程序中包含调试信息
#include <xxx.h> 预处理在标准头文件路径中搜索xxx.h, Linux平台标准头文件路径:/usr/include
#include "yyy.h" 预处理现在当前目录中搜索yyy.h, 若无,再到标准头文件路径中搜索#include <xxx.h> gcc -I 头文件路径头文件既不在标准头文件,也不在当前路径
-I 添加标准头文件搜索路径
-L 添加标准库文件搜索路径
-static 禁止链接动态库文件,只允许链接静态库文件
-Wall 显示所有GNU提供的警告信息
-O2 优化等级
调试器gdb
info b :查询断点命令
break(b)行号:设置断点
delete(d):删除所有断点
d 断点号:删除断点
step(s):单步(进入子函数或者子程序内部单步) next(n):单步(不进入函数单步)
continue(c):跳过断点继续往下运行
List(l):查看源代码内容
l 行号:从某一行开始查看
print(p)变量:查看断点处运行之后变量的值
r:开始运行。
Linu 系统编程实验gccgdb的使用以及Makefile文件的编写
实验二:gcc、gdb、Makefile的使用●实验目的:(一)学会使用gcc编译器(二)学会gdb调试器的使用(三)学会编写Makefile●实验要求:(一)编写一应用程序,使用gcc进行编译,并分别使用-o,-g,-static,-O2等选项(二)编写一应用程序,使用gdb调试,调试中使用到该小节所介绍的所有命令(三)实现一应用程序,该程序有两个c文件构成,使用makefile来完成对该程序的编译●实验器材:软件:安装了Linux的vmware虚拟机硬件:PC机一台●实验步骤:(一)gcc编译器1、先用vi编辑hello.c文件,内容如下:2、gcc指令的一般格式为:gcc [选项] 要编译的文件 [选项] [目标文件]例:使用gcc编译命令,编译hello.c生成可执行文件hello,并运行hello上面的命令一步由.c文件生成了可执行文件,将gcc的四个编译流程:预处理、编译、汇编、连接一步完成,下面将介绍四个流程分别做了什么工作3、-E选项的作用:只进行预处理,不做其他处理。
例:只对hello.c文件进行预处理,生成文件hello.i,并查看通过查看可以看到头文件包含部分代码#include <stdio.h>经过预处理阶段之后,编译器已将stdio.h的内容贴了进来。
4、-S选项的使用-S选项的作用:只是编译不汇编,生成汇编代码例:将hello.i文件只进行编译而不进行汇编,生成汇编代码hello.s5、-c选项的使用-c选项的作用:只是编译不连接,生成目标文件.o例:将汇编代码hello.s只编译不链接成hello.o文件6、将编译好的hello.o链接库,生成可执行文件hello7、-static选项的使用-static选项的作用:链接静态库例:比较hello.c连接动态库生成的可执行文件hello和链接静态库生成的可执行文件hello1的大小可以看到静态链接库的可执行文件hello1比动态链接库的可执行文件hello要大的多,他们的执行效果是一样的8、-g选项的使用-g选项的作用:在可执行程序中包含标准调试信息例:将hello.c编译成包含标准调试信息的可执行文件hello2带有标准调试信息的可执行文件可以使用gdb调试器进行调试,以便找出逻辑错误9、-O2选项的使用-O2选项的作用:完成程序的优化工作例:将hello.c用O2优化选项编译成可执行文件hello3,和正常编译产生的可执行文件hello进行比较(二)gdb调试器1、先用vi编辑文件test.c用于gdb调试器调试,内容如下#include <stdio.h>int main(void){int sum(int sum);int i,result=0;sum(100);for(i=1;i<=100;i++){result+=i;}printf("The sum in main function is %d\n",result);return 0;}int sum(int num){int i,n=0;for(i=0;i<=num;i++){n+=i;}printf("The sum in sum function is %d\n",n);}2、将test.c文件编译成包含标准调试信息的文件test3、启动gdb进行调试可以看到gdb启动界面中显示了gdb的版本、自由软件等信息,然后进入了有”gdb”开头的命令行界面4、l(list)命令l命令用于查看文件可以看到每行代码面前都有对应的行号,这样方便我们设置断点。
第3章-GCC和GDB
可进行的操作方式
预处理、编译、汇编、链接
生成选项
预处理、编译、汇编、链接 编译、汇编、链接 编译、汇编、链接 -E -E
.s
.S
预处理后的汇编程序
未预处理的汇编程序
汇编、链接
预处理、汇编、链接
-S
-S
.h
.o .a .so
头文件
目标文件 静态库文件 动态库文件
不进行任何操作
链接 不进行任何操作 不进行任何操作 -C
gcc编译流程 – 第二步:编译
编译成功后,使用cat 指令查看gcc-test.s的文件 信息:
gcc编译流程 – 第二步:编译
编译总结:
找出源文件中的语法的错误,没有错误生成 汇编文件 因此基本上的错误显示都是在该步骤出现
gcc编译流程 – 第三步:汇编
在这个阶段中,gcc将对汇编文件进行处理: 将编译阶段生成的.s汇编文件翻译成二进制 机器代码。 可以通过gcc的选项-c来执行汇编,并生成gcctest.o的文件:
linux下的库有两种:静态库和共享库(动态库)。 二者的不同点在于代码被载入的时刻不同。
静态库的代码在编译过程中已经被载入可执 行程序,因此体积较大。“空间换时间” 共享库的代码是在可执行程序运行时才载入 内存的,在编译过程中仅简单的引用,因此 代码体积较小。 “时间换空间”
库存在的意义
这个库为线程库
gcc基本编译选项
-Wall :表示产生所有警告。 未使用的变量 有类型的函数,无返回值 不同类型变量的赋值
-W
-Werror:含义是将所有警告作为错误(error),即出现 警告就停止编译。
gcc基本编译选项 总结
实验一-LinuxC编程工具GCC和GDB
淮海工学院计算机工程学院实验报告书课程名:《Linux程序设计》题目:实验一Linux C编程工具:GCC和GDB班级:软件131学号: 2013122870姓名:王裕一、实验目的与要求1.掌握Linux C开发过程中的基本概念;2.掌握如GCC,GDB等开发工具的使用。
二、实验容1.将参考代码录入到test1.c文件中,编译执行后发现结果与预期不一致,请使用GDB调试,完成字符串反序输出功能。
三、参考源代码#include <stdio.h>#include <stdlib.h>#include <string.h>int reverse_str(char *string);int main (void) {char string[] = "Linux C Tools : GCC and GDB";printf ("The original string is %s \n", string);reverse_str (string);}int reverse_str (char *str) {char *new_str;int i, size;size = strlen (str);if((new_str = (char *) malloc (size + 1)) == NULL) {return -1;}for (i = 0; i < size; i++)new_str[size - i] = str[i];new_str[size+1] = ' ';printf("The reversed string is %s\n",new_str);free(new_str);return 0 ;}四、实验步骤步骤1.编辑源代码test1.cmkdir test1cd test1gedit test1.c(1)使用gedit编辑器,建议课外学习vim;(2)分析代码中语句功能。
Linux环境下 C语言编程实验报告
西安邮电大学(计算机学院)课内实验报告实验名称: Linux环境下 C语言编程专业名称:网络工程班级:1203班学生姓名:学号(8位):指导教师:王亚刚实验日期:2014年12月3日一、实验目的(2)掌握gcc编译器使用方法。
(3)掌握gdb调试方法。
二、实验内容1.编辑测试源代码。
2. gcc编译测试源代码3. gdb调试和排错。
三、实验步骤1.编辑如下参考源代码,代码的原意为倒序输出main函数中定义的字符串#include <stdio.h>int display1(char *string);int display2(char *string);p iint main (){char string[] = "nnWelcom to Linux";display1 (string); display2 (string);}int display1 (char *string){printf ("The original string is %s \n", string);}int display2 (char *string1){char *string2;int size,i;size = strlen (string1);string2 = (char *) malloc (size + 1);for (i = 0; i < size; i++)string2[size - i] = string1[i];string2[size+1] = ' ';printf("The string afterward is %s\n",string2);}2.使用gcc将参考源代码编译为可执行文件。
3.运行可执行文件,观察运行结果并记录。
4.使用gdb调试程序,通过设置断点、单步跟踪,找出错误原因并记录。
实验一 gcc和gdb的使用
3.执行当前目录下编译生成的可执行文件,使 用以下格式: ./可执行文件名 ./a.out
也可以使用以下方法编译源代码文件.生成自 命名的可执行文件; gcc源文件-o自命名的文件名 例如:gcc test.c –o test
4.gdb简介 Linux包含了一个叫gdb的GNU调试程序。gdb是一个 用来调试c和c十十程序的强力调试器。它使用户能在 程序运行时观察程序的内部结构和内存的使用情况。 以下是gdb所提供的一些功能: 能监视程序中变量的值; ·能设置断点以使程序在指定的代码行上停止执行; ·能一行行地执行代码。
在命令行上键入gdb并按回车键就可以运行gdb 了, 如果一切正常的话,gdb将被启动,并且将 在屏幕上显示类似的内容:
实验内容 将下面的程序输入到一个文件名字为 test.c的磁盘文件中,利用调试程序找出 其中的错误,修改后存盘。该程序的功 能是显示一个简单的问候语,然后用反 序方式将它列出。
实பைடு நூலகம்一 gcc和gdb的使用
实验目的 1.掌握Linux操作系统下最常用的c 语言编译器gcc的使用 2.掌握Linux操作系统下最常用的 代码调试器gdb的使用; 3.掌握调试代码的基本方法,如 观察变量、设置断点等。
gcc简介 gcc 是Linux操作系统下一种常用的c语言编译器。 1.使用文本编辑器编写完源程序,保存成 .c为扩展名的c语言源代码文件。 2.返回到shell界面,使用gcc对源程序进行编泽 其命令为: gcc 源程序 例 : gcc test.c 如果源代码没有语法错误,使用以上命令编译,会在 当前目录下生成一个名为a.out的可执行文件。如果源代码 有语法错误,则不会生成任何文件,gcc编译器会在shell 中提示错误的地点和类型。(可使用gdb来调试)
gcc和gdb的使用 linux
漳州师范学院
实验报告
班级 11网络2班学号姓名座号 15 同组人
实验日期成绩
课程名称:操作系统
实验题目:gcc和gdb的使用
实验目的与要求1.掌握Linux操作系统下最常用的c语言编译器gcc的使用;2.掌握Linux操作系统下最常用的代码调试器gdb的使用;3.掌握调试代码的基本方法,如观察变量、设置断点等
实
验
环
境
的
配
置
PC 兼容机。
Window xp 以上操作系统
第 1 页
实验内容与具体步骤将下面的程序输入到一个文件名字为test.c的磁盘文件中,利用调试程序找出其中的错误,修改后存盘。
该程序的功能是显示一个简单的问候语,然后用反序方式将它列出。
漳州师院实验报告
实验内容与具体步骤
实验心得实验中存在的问题及解决办法:
1. 在用gdb进行调试的时候,会运用到一些比如以行号设置断点、以函数名设置断点、以条件表达式设置断点、删除断点、查看和设置变量的值、查看当前设置的断点信息等命令,通过老实讲的以及上网查询的方式找到了这些命令的使用方法。
2. 在编译第一个程序的时候,第一次出现了很多语法错误,通过自己改正了之后解决了这些错误。
3.本次实验学习了一下gcc与gdb的具体使用方法。
并亲自用gdb调试了一下程序。
gdb还是用不熟,只能以后慢慢加深体会了。
注:如果填写内容超出表格,自行添加附页。
漳州师院实验报告。
gcc_gdb
↗
↓
file (可执行 目标程序 (二进制))
▲ 汇编阶段 接下来在命令行输入(as file.s -o file.o) 汇编器将file.s翻译成机器语 言指令,把这些指令打包成为一种叫做可重定位目标程序格式,并将结果保存在目 标文件(file.o) 中, file.o文件是一个二进制文件,它的字节编码是机器语言指令而 不是字符,如果我们在文本编辑器中打开file.o文件,呈现的将是一堆乱码. ▲ 链接阶段 然后在命令行中输入: ld file.o -lc /usr/lib/crt1.o /usr/lib/crti.o /usr/lib/crtn.o --dynamic-linker /lib/ld-linux.so.2 -o file 注意我们的程序调用了printf函数,它是标准C库的一个函数,printf函数对应的 标文件printf.o是存放在标准C库的共享库文件libc.so.6中的。因此,必须在链 接时,将libc.so.6中的printf.o合并到输出文件file中。此外,为了建立程序在 执行时的运行环境,我们还必须把建立和支持运行环境的目标文件crt1.o、 crti.o、crtn.o和动态连接库文件ld-linux.so.2(在参数--dynamic-linker后指 定)合并到输出文件file中。
gcc/gdb简要入门
本文档由电子信息科学与技术系2006级的孙学婷同学撰写, 介绍了在Linux下使用gcc和gdb来编译和调试C程序的基本方 法,略有修正。在此向她表示感谢!
实验平台:计算机,Linux系统及其编程工具 (一)gcc和gdb简介
GCC原本是”GNU C Compiler”的意思,但是它不只是C语言的不编译器,现在能够 支持多种其他语言,包括C++,Java等.它使用可替换的后端处理器,以产生适合于不同 算机体系结构上的可执行文件。gcc手册网址:/onlinedocs/。 GDB(GNU symbolic debugger)GNU开源组织发布的一个强大的UNIX下的 程序调试工具。 它的重要工作就是测试程序和排除错误,实际上它就是一个程序,可 以在一个严密的环境中执行另一个程序. gdb手册网址:/software/gdb/documentation/
课件:实验(常用开发工具gcc,gdb)
-v
功
Байду номын сангаас
能
只生成目标文件,不进行连接。用于对源文件的分别编译
只进行编译,不做汇编,生成汇编代码文件格式,其名与 源文件相同,但扩展名为.s
将输出放在文件file中。如果未使用该选项,则可执行文件 放在a.out中
指示编译程序在目标代码中加入供调试程序gdb使用的附 加信息
在标准出错输出上显示编译阶段所执行的命令,即编译驱 动程序及预处理程序的版本号
gdb调试程序常用选项及其作用
进入gdb调试:gdb file 查看源代码:list 设置断点:break 30 查看断点设置情况:info b 运行代码:run 单步运行代码:next 查看暂停点变量值:print 变量 继续程序的运行:continue 退出Gdb:quit
三、实验步骤
1.在家目录下使用mkdir命令新建文件夹,文件夹以自己的汉语拼音名字命 名。使用cd命令进入到该文件夹中,所有实验内容都在该文件夹下进行。
2.使用vim编辑如下程序,并使用gcc编译,使用gdb调试。
3.使用vim/vi编辑如下程序,并 使用gcc编译,使用gdb调试。
常用开发工具(gcc,gdb)
一、实验目的 1.使用vim/vi编写简单的C程序; 2.使用gcc对程序进行编译; 3.使用gdb对程序进行调试。 二、实验内容 1. helloworld程序。 2. 字符串处理程序。 3. 数学计算程序。
gcc编译程序常用选项及其作用
选项格式 -c -S
-o file
Linux下C语言程序的编译与调试实验报告
Linux下C语言程序的编译调试实验学院:电子信息工程学院专业:通信工程*名:***学号:********指导老师:周围老师完成时间:2013年6月3日一、实验目的1. 熟悉Linux下C语言编译调试环境。
2. 学会使用gcc编译C程序。
3. 学会使用gdb调试C程序。
二、实验内容1. 在Linux下,编写程序factorize.c,功能如下:输入一个int型整数,输出其因式分解结果。
2. 编译运行,生成可执行文件。
3. 用gdb调试该程序,找到错误并修改。
三、实验软件环境GCCGCC(GNU Compiler Collection,GNU编译器集合)是一套由GNU工程开发的支持多种编程语言的编译器。
GCC是自由软件发展过程中的著名例子,由自由软件基金会以GPL协议发布。
GCC是大多数类Unix操作系统(如Linux、BSD、Mac OS X等)的标准的编译器,GCC同样适用于微软的Windows。
GCC支持多种计算机体系芯片,如x86、ARM,并已移植到其他多种硬件平台。
GCC原名为GNU C编译器(GNU C Compiler),因为它原本只能处理C语言。
GCC很快地扩展,并支持处理C++。
后来又扩展能够支持更多编程语言,如Fortran、Pascal、Objective-C、Java、Ada、Go等。
GDBGDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。
或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。
所谓“寸有所长,尺有所短”就是这个道理。
一般来说,GDB主要帮助你完成下面四个方面的功能:1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。
2、可让被调试的程序在你所指定的调置的断点处停住。
(断点可以是条件表达式)。
3、当程序被停住时,可以检查此时你的程序中所发生的事。
实验一 gcc和gdb的使用
实验一 gcc和gdb的使用
实验目的 1.掌握Linux操作系统下最常用的c 语言编译器gcc的使用 2.掌握Linux操作系统下最常用的 代码调试器gdb的使用; 3.掌握调试代码的基本方法,如 观察变量、设置断点等。
4.gdb简介 Linux包含了一个叫gdb的GNU调试程序。gdb是一个 用来调试c和c十十程序的强力调试器。它使用户能在 程序运行时观察程序的内部结构和内存的使用情况。 以下是gdb所提供的一些功能: 能监视程序中变量的值; · 能设置断点以使程序在指定的代码行上停止执行; · 能一行行地执行代码。
在命令行上键入gdb并按回车键就可以运行gdb 了, 如果一切正常的话,gdb将被启动,并且文件名字为 test.c的磁盘文件中,利用调试程序找出 其中的错误,修改后存盘。该程序的功 能是显示一个简单的问候语,然后用反 序方式将它列出。
实验预备内容 1.阅读在线帮助命令man gcc的 内容,了解gcc的基本使用 2.阅读在线帮助命令man gdb的 内容,了解gdb的基本使用
gcc简介 Unix上使用的c语言编译器gcc,在Linux上的派生就是 gcc。在使用vi编写完源程序之后,返回到shell界面,使用 gcc对源程序进行编泽的命令为: gcc 源程序 其中,“源程序”即为编写的以.c为扩展名的c语言源代 码文件。
3、
如果源代码没有语法错误,使用以上命令编译,会在 当前目录下生成一个名为a.out的可执行文件。如果源代码 有语法错误,则不会生成任何文件,gcc编译器会在shell 中提示错误的地点和类型。
也可以使用以下方法编译源代码文件.生成自 命名的可执行文件; gcc源文件-o自命名的文件名 执行当前目录下编译生成的可执行文件,使用 以下格式: ./可执行文件名 当使用gcc编译程序源代码的时候,可能会因 为源代码存在语法错误,编译无法进行下。这 时候,就可以使用调试器gdb来对程序进行调 试。
06.Linux下编程工具(gcc、gdb)
嵌入式系统工程师Linux下编程工具(概述、目录结构)linux环境开发概述linux文件及目录结构linux常用命令linux文本编辑器vi+gedit linuxshell脚本编程linux编译器gcc、gdblinux工程管理软件—makelinux环境开发概述linux文件及目录结构linux常用命令linux文本编辑器vi+gedit linuxshell脚本编程linux编译器gcc、gdblinux工程管理软件—makewindows开发方式特点:在电脑上装一个vc或其它集成开发环境编辑程序—>编译程序—>看现象—>有问题—>修改程序->调试程序->查看linux开发特点:linux下的程序开发大多通过在本地安装虚拟机、物理机或网络连接到服务器完成出于效率、远程开发、嵌入式开发的考虑:开发方式大多是在命令行下完成,没有很好的集成开发环境供我们使用Linux文件及目录结构无论何种版本的linux,桌面、应用是linux的外衣文件组织、目录结构才是linux的内心Linux命令无命令,不Linux编辑器、编译器、调试器写程序永远离不开:编辑、编译、调试不同windows下完善集成开发环境,linux下以上操作大多在字符界面通过各种各样命令完成,品尝自己原始加工的乐趣shell脚本+makefileshell脚本处理linux中复杂而又繁琐的操作makefile管理复杂的代码关系linux环境开发概述linux文件及目录结构linux常用命令linux文本编辑器vi+gedit linuxshell脚本编程linux编译器gcc、gdblinux工程管理软件—makeGCC概述gcc命令gdb动态库与静态库GCC概述gcc命令gdb动态库与静态库GCC概述编译器是将易于编写、阅读和维护的高级计算机语言翻译为计算机能解读、运行的低级机器语言的程序。
GUN项目中的一个子项目GCC(GNU Compiler Collection )是一个编译器套装,是GNU计划的关键部分,也是GUN 最优秀的软件之一。
linux开发工具的使用gcc实验总结简短
linux开发工具的使用gcc实验总结简短在Linux开发中,GCC是一个广泛应用的编译器套件,为程序员提供了丰富的工具和功能,方便进行开发和调试。
本文将为大家总结一下使用GCC进行实验的经验与技巧。
一、安装GCC在开始使用GCC之前,首先需要安装GCC编译器。
在大多数Linux发行版中,GCC已经预安装,可以直接使用。
如果没有安装,可以通过包管理器进行安装,例如在Ubuntu上可以使用以下命令进行安装:```sudo apt-get install gcc```二、编写和编译源代码1. 创建源代码文件使用任意文本编辑器,创建一个以.c为扩展名的源代码文件,例如hello.c。
2. 编写源代码在源代码文件中,可以使用C语言来编写程序。
下面是一个简单的示例代码:```c#include <stdio.h>int main() {printf("Hello, World!\n");return 0;}```3. 编译源代码打开终端,进入源代码所在的目录,使用以下命令进行编译:```gcc hello.c -o hello```其中,`hello.c`是源代码文件的名称,`hello`是生成的可执行文件的名称。
通过`-o`选项指定输出文件名。
三、运行和调试程序1. 运行程序编译成功后,可以直接运行生成的可执行文件。
在终端输入以下命令运行程序:```./hello```程序将会输出`Hello, World!`。
2. 调试程序GCC也提供了强大的调试功能,方便程序员进行调试和排错。
可以通过使用`-g`选项来编译生成带有调试信息的可执行文件:```gcc -g hello.c -o hello-debug```然后,可以使用`gdb`命令来启动调试器,并加载可执行文件进行调试:```gdb hello-debug```调试器提供了许多命令和功能,可以帮助你定位和修复代码中的问题。
LINUX下C语言使用、编译与调试实验
LINUX下C语言使用、编译与调试实验LINUX 下C语言使用、编译与调试实验实验目的1、复习C语言程序基本知识2、练习并掌握UNIX提供的vi编辑器来编译C程序3、学会利用gcc、gdb编译、调试C程序实验内容1、用vi编写一个简单的、显示"Hello,World!"的C程序,用gcc 编译并观察编译后的结果2、利用gdb调试该程序3、运行生成的可执行文件。
实验指导一、C语言使用简介LINUX中包含了很多软件开发工具。
它们中的很多是用于C和C++应用程序开发的。
C是一种能在UNIX的早期就被广泛使用的通用编程语言。
它最早是由Bell 实验室的Dennis Ritchie为了UNIX的辅助开发而写的,从此C就成为世界上使用最广泛的计算机语言。
C能在编程领域里得到如此广泛支持的原因有:(1)它是一种非常通用的语言,并且它的语法和函数库在不同的平台上都是统一的,对开发者非常有吸引力;(2)用C写的程序执行速度很快;(3)C是所有版本UNIX上的系统语言;二、文件编辑器vivi是在UNIX 上被广泛使用的中英文编辑软件。
vi是visual editor 的缩写,是UNIX提供给用户的一个窗口化编辑环境。
进入vi,直接执行vi编辑程序即可。
例:$vi test.c显示器出现vi的编辑窗口,同时vi会将文件复制一份至缓冲区(buffer)。
vi先对缓冲区的文件进行编辑,保留在磁盘中的文件则不变。
编辑完成后,使用者可决定是否要取代原来旧有的文件。
1、vi的工作模式vi提供二种工作模式:输入模式(insert mode)和命令模式(command mode)。
使用者进入vi后,即处在命令模式下,此刻键入的任何字符皆被视为命令,可进行删除、修改、存盘等操作。
要输入信息,应转换到输入模式。
(1)命令模式在输入模式下,按ESC可切换到命令模式。
命令模式下,可选用下列指令离开vi::q! 离开vi,并放弃刚在缓冲区内编辑的内容:wq 将缓冲区内的资料写入磁盘中,并离开vi:ZZ 同wq:x 同wq:w 将缓冲区内的资料写入磁盘中,但并不离开vi:q 离开vi,若文件被修改过,则要被要求确认是否放弃修改的内容,此指令可与:w配合使用(2)命令模式下光标的移动H 左移一个字符J 下移一个字符K 上移一个字符L 右移一个字符0 移至该行的首$ 移至该行的末^ 移至该行的第一个字符处H 移至窗口的第一列M 移至窗口中间那一列L 移至窗口的最后一列G 移至该文件的最后一列W, W下一个单词 (W 忽略标点)B, B 上一个单词 (B 忽略标点)+ 移至下一列的第一个字符处- 移至上一列的第一个字符处( 移至该句首) 移至该句末{ 移至该段首} 移至该段末NG 移至该文件的第n列N+ 移至光标所在位置之后第n列n- 移至光标所在位置之前第n列(3)输入模式输入以下命令即可进入vi输入模式:a(append) 在光标之后加入资料A 在该行之末加入资料i(insert) 在光标之前加入资料I 在该行之首加入资料o(open) 新增一行于该行之下,供输入资料用O 新增一行于该行之上,供输入资料用Dd 删除当前光标所在行X 删除当前光标字符X 删除当前光标之前字符U 撤消·重做F 查找s 替换,例如:将文件中的所有"FOX"换成"duck",用":%s/FOX/duck/g"ESC 离开输入模式更多用法见 info vi三、GNU C编译器LINUX上可用的C编译器是GNU C编译器,它建立在自由软件基金会编程许可证的基础上,因此可以自由发布。
Linux下的C语言编程实验报告
[root@localhost home]# echo $name1
zhang san
[root@localhost home]# echo $name2
zhang san
[root@localhost home]#
7.env系统变量
管理模式1
显示passwd中的第一列|命令
[root@localhost home]# cat /etc/passwd |cut -d ":" -f1
(.text+0x18): undefined reference to `main'
collect2: ld返回1
[root@localhost home]# . /a.out
bash: /a.out:没有那个文件或目录
[root@localhost home]# gcc test.c -o test.i
调用Linux的shell来执行<command string>,环境变量SHELL中定义的Linux的shell将会用来执行<command string>。如果SHELL没有定义,那就使用Linux的标准shell:/bin/sh(在Windows中使用或cmd.exe)。
Gcc的警告提示功能
gcc包含完整的出错检查和警告提示功能,它们可以帮助Linux程序员尽快找到错误代码,从而写出更加专业和优美的代码。先来读读例3-2所示的程序,这段代码写得很糟糕,仔细检查一下不难挑出如下毛病:
main函数的返回值被声明为void,但实际上应该是int;
使用了GNU语法扩展,即使用long long来声明64位整数,仍不符合ANSI/ISO C语言标准;
linux下的c语言编程实验报告
linux下的c语言编程实验报告Linux下的C语言编程实验报告一、引言C语言是一种广泛应用于系统软件和应用软件开发的编程语言,而Linux是一个非常流行的操作系统,因其开源和稳定性而被广泛使用。
本实验报告旨在介绍在Linux平台下进行C语言编程的实验过程和结果。
二、实验目的本实验的主要目的是通过在Linux操作系统上进行C语言编程实验,提高学生对C语言的理解和运用能力。
具体目标如下:1. 熟悉Linux环境下的C语言编程工具和开发环境;2. 掌握C语言的基本语法和常用函数;3. 理解C语言程序的运行原理和调试技巧;4. 学会使用C语言编写简单的程序解决实际问题。
三、实验过程1. 实验环境准备在开始实验之前,需要准备好以下环境:- 一台安装有Linux操作系统的计算机;- 一个文本编辑器,如Vim或Gedit,用于编写C语言程序;- GCC编译器,用于编译和运行C语言程序。
2. 实验步骤本实验主要包括以下几个步骤:- 编写C语言程序:根据实验要求,使用文本编辑器编写C语言程序,实现特定的功能;- 编译程序:使用GCC编译器将C语言程序编译成可执行文件;- 运行程序:在Linux终端中运行编译生成的可执行文件,验证程序的正确性;- 调试程序:如果程序存在错误或异常,使用调试工具如GDB进行调试,找出并修复问题;- 总结实验结果:根据实验结果总结和分析实验过程中遇到的问题和解决方法,得出结论。
四、实验结果根据实验要求,我们编写了一系列C语言程序,并在Linux环境下进行了测试。
以下是实验结果的一些例子:1. 实验一:编写一个程序,输出“Hello, World!”。
```c#include <stdio.h>int main() {printf("Hello, World!\n");return 0;}```2. 实验二:编写一个程序,计算并输出两个整数的和。
```c#include <stdio.h>int main() {int num1, num2, sum;printf("请输入两个整数:");scanf("%d %d", &num1, &num2);sum = num1 + num2;printf("两个数的和为:%d\n", sum);return 0;}```3. 实验三:编写一个程序,判断一个整数是否为偶数。
Linux下编辑、编译、调试命令总结——gcc和gdb描述
Linux下编辑、编译、调试命令总结——gcc和gdb描述GCC gcc是linux系统集成的编译器。
在linux环境下编辑程序,⾸先需要克服的便是没有集成开发环境的⼀键式操作所带来的⿇烦。
这其中涉及命令⾏操作、编译选项的设定、⽂件依赖关系的书写(makefile)等问题。
这⾥主要介绍的是关于gcc的常⽤命令⾏参数及其相应的作⽤。
(若编译C++⽂件,则只需将下列命令的 gcc 换为 g++,源⽂件的后缀应为 .C/.cpp/.c++/.cc等)基本格式:gcc [options] file1 file2... //若不加⼊参数,则按默认参数依次执⾏编译、汇编和链接操作,⽣成的可执⾏⽂件名为 a.out常⽤参数:-E //只执⾏预处理操作,直接输出到标准输出(可通过 -o 命令指定输出到⽂件中 ),可配合 -v 命令使⽤,查看头⽂件的搜索⽬录,即使⽤ -E -v 编译选项 -S //只执⾏到编译操作完成,不进⾏汇编操作,⽣成的是汇编⽂件(.s 或 .asm),内容为汇编语⾔ -c //执⾏编译和汇编,但不进⾏链接,即只⽣成可重定位⽬标⽂件(.o),为⼆进制⽂件,不⽣成完整的可执⾏⽂件 -o filename //将操作后的内容输出到filename指定的⽂件中 -static //对于⽀持动态链接的系统,使⽤静态链接⽽不是动态链接进⾏链接操作 -g //编译时⽣成debug有关的程序信息(供gdb使⽤) --save-temps //⽣成编译过程的中间结果⽂件(包括预处理⽂件(x.ii)、汇编代码(x.s)、⽬标⽂件(x.o)和最终的可执⾏⽂件) -IPATH //在PATH指定的⽬录下寻找相关的include⽂件,参数中间不加空格 -lxx //其中xx为指定函数库,对于Linux环境下的函数库,静态库后缀为.a,动态库后缀为.so,⼀般库名为libxx.a或libxx.so,如加⼊libm.so库,则使⽤参数-lm(去除lib和后缀.a\so) -LPATH //在PATH指定的⽬录下寻找相关的库⽂件,即-lxx指定待链接的库,-L指定寻找该库的路径。
进程管理_实验报告
一、实验目的1. 理解Linux操作系统中进程的概念,明确进程与程序的区别。
2. 掌握Linux下进程的创建、调度、同步与通信等基本操作。
3. 学会使用Linux命令查看和管理进程。
二、实验环境1. 操作系统:Linux2. 编程语言:C/C++3. 开发工具:gcc、gdb三、实验内容1. 进程创建与调度2. 进程同步与互斥3. 进程通信4. 进程控制四、实验步骤1. 进程创建与调度(1)编写一个C程序,创建一个子进程,并在父进程中打印出子进程的进程标识符(PID)。
```c#include <stdio.h>#include <unistd.h>#include <sys/types.h>int main() {pid_t pid;pid = fork(); // 创建子进程if (pid == 0) { // 子进程printf("子进程的PID:%d\n", getpid());} else if (pid > 0) { // 父进程printf("父进程的PID:%d,子进程的PID:%d\n", getpid(), pid); } else {printf("创建子进程失败\n");}return 0;}```(2)编译并运行程序,观察结果。
2. 进程同步与互斥(1)编写一个C程序,使用互斥锁(mutex)实现两个进程的同步。
```c#include <stdio.h>#include <stdlib.h>#include <pthread.h>pthread_mutex_t mutex;void thread_func(void arg) {pthread_mutex_lock(&mutex); // 获取互斥锁printf("线程 %ld 获取了互斥锁\n", pthread_self());sleep(1);pthread_mutex_unlock(&mutex); // 释放互斥锁return NULL;}int main() {pthread_t thread1, thread2;pthread_mutex_init(&mutex, NULL); // 初始化互斥锁pthread_create(&thread1, NULL, thread_func, (void )1);pthread_create(&thread2, NULL, thread_func, (void )2);pthread_join(thread1, NULL);pthread_join(thread2, NULL);pthread_mutex_destroy(&mutex); // 销毁互斥锁return 0;}```(2)编译并运行程序,观察结果。
Linux程序设计基础—C环境(gcc gdb makefile)
博创科技 嵌入互动
Linux程序需要首先转化为低级机器语言即所谓的二进制代码 以后,才能被操作系统执行。 例如编程时,先用普通的编程语言生成一系列指令,这些 指令可被翻译为适当的可执行应用程序的二进制代码。这 个翻译过程可由解释器一步步来完成,或者也可以立即由 编译器明确地完成。 shell编程语言如BASH、TCSH、GAWK、Perl、Tcl和Tk都利 用自己的解释器。用这些语言编制的程序尽管是应用程序文 件,但可以直接运行。编译器则不同,它将生成一个独立的 二进制代码文件然后才可以运行。
© 2006 博创科技
博创科技 嵌入互动
GNU风格 (2/2)
当一个if中嵌套了另一个if-else时,应用花括号把if-else括起来。 要在同一个声明中同时说明结构标识和变量或者结构标识和类型定义 (typedef)。先定义变量,再使用。 尽量避免在if的条件中进行赋值。 请在名字中使用下划线以分割单词,尽量使用小写;把大写字母留给宏和 枚举常量,以及根据统一惯例使用的前缀。例如,应该使用类似 ignore_space_change_flag的名字;不要使用类似iCantReadThis的名字。 用于表明一个命令行选项是否给出的变量应该在选项含义的说明之后,而 不是选项字符之后被命名。
博创科技 嵌入互动
命令模式
4、复制和移动 yy 复制当前行到内存缓冲区 nyy 复制 n 行内容到内存缓冲区 y与光标移动的组合 p 将缓冲区的内容粘贴到光标的后面 P 将缓冲区的内容粘贴到光标的前面 另:在末行模式下实现移动 :n1,n2 m n3 : 把 n1到n2 行内容搬到第 n3 行后
© 2006 博创科技
© 2006 博创科技
博创科技 嵌入互动
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
淮海工学院计算机工程学
实验报告书
评语:
成绩:指导教师:
批阅时间:年月
实验目的与要求
1. 掌握Linux C 开发过程中的基本概念;
2. 掌握如GCC GDB等开发工具的使用。
二、实验内容
1. 将参考代码录入到文件中,编译执行后发现结果与预期不一致,请使用GDE调试,
完成字符串反序输出功能。
三、参考源代码
#include <>
#include <>
#include <>
int reverse_str(char *string);
int main (void) {
char string[] = "Linux C Tools : GCC and GDB"; printf ("The original string is %s \n", string); reverse_str (string);
}
int reverse_str (char *str) {
char *new_str;
int i, size;
size = strlen (str);
if((new_str = (char *) malloc (size + 1)) == NULL) { return -1;
}
for (i = 0; i < size; i++)
new_str[size - i] = str[i];
new_str[size+1] = ' ';
printf("The reversed string is %s\n",new_str); free(new_str);
return 0 ;
}
四、实验步骤
步骤1. 编辑源代码
mkdir test1
cd test1
gedit
(1) 使用gedit 编辑器,建议课外学习vim;
(2) 分析代码中语句功能。
步骤 2. 编译源代码
gcc -o test1 -g
(1) 复习gcc 常用选项;
(2) 帮助学生排查编译时错误。
(3) 分析输出结果步骤3. 调试test1
gdb test1
(1) 回顾调试的基本方法:跟踪语句执行过程,观察执行结果;
(2) 设置断点的三种基本方法:
① b <line_number>
② b <line_number> if condition_expression
③ b <function_name>
(3) 查看中间输出结果:
① p <var>
② set print element 0 p <array_name> 或<pointer>
说明:GDB中查看字符串变量值可通过“ set print element 0 ”命令,一次性显示字符串所有内容。
(4) 分析中间结果,修改28 行语句为new_str[size - i-1] = str[i];
五、实验结果与截图
1. 编写文件并编译
2. 设置断点,进行gdb 测试跟踪变量。
执行到i=27 时size-i=0 ,str[27] 已经超过str 字符串限制,于是new_str[0]= '\0 '。
输出new_str 时,由于超过限制无法输出。
所以修改程序第28行语句为new_str[size - i-1] = str[i];
正确的程序运行结果如下图所示。
六、思考题
1. 分析以下代码,完成指定范围内数值累加功能:
#include <>
/* 函数功能:将low 到high 之间的数值累加求和*/
int add_range(int low, int high) {
int i, sum;
for (i = low; i <= high; i++)
sum = sum + i;
return sum;
}
int main(void) {
int result[2];
result[0] = add_range(1, 10);
result[1] = add_range(1, 100);
printf("result[0]=%d\nresult[1]=%d\n", result[0], result[1]);
return 0;
}
答:进行累加时,局部变量sum的值会被内存保存下来,会导致数值错误,要对其初始化为0。
把int i,sum; 改为int i;int sum = 0;
2.结构化编程经常将相近功能编译成库形式,方便调用。
请查阅资料,使用GCC各一
组功能相关的源文件编译成静态库或动态库?建立库文件的源文件和如下所示:/* */
#include <>
void print1(int arg) {
printf("%d\n", arg);
}
/* */
#include <>
void print2(char* arg) {
printf("%s\n", arg);
}
调用库函数的源文件为如下:
/* */
void print1(int arg);
void print2(char* arg);
int main(int argc, char* argv[]) {
int i = 3;
char* str = "test libary!\n";
print1(i);
print2(str);
return 0 ;
}
生成静态库()并使用的基本步骤
步骤1:编译, 生成, 目标文件
gcc -c
步骤2:生成myprint 静态库文件
ar -r
步骤3:拷贝库文件到/usr/lib 目录下
sudo cp /usr/lib
说明:若不将静态链接库拷贝到/usr/lib 目录下,在调用该库时需通过GCC选项丄指定库文件所在路径
步骤4:调用静态库文件,编译生成可执行二进制文件
gcc -o main -lmyprint
生成动态链接库()并使用的基本步骤
步骤1:编译, 生成, 目标文件
gcc -c -fpic
注意:GCC选项“-fpic ”表示独立编址,运行时可计算出相应的内部地
址。
步骤2:生成myprint 动态链接库
gcc - shared -o
步骤3:拷贝库文件到/usr/lib 目录下
sudo cp /usr/lib
步骤4:调用动态库文件,编译生成可执行二进制文件
gcc -o main
七、实验体会
本次实验是Linux 的第一次实验,换了一个环境,很不适应,没有鼠标操作的情况下,可以通过上下键来选择vim,gcc 等操作,也极为方便了我们的操作,再有就是gdb,语言代码除了符合最基本的语法规范之外还必须符合设计者的逻辑意图,
如果发现生成的可执行文件运行结果不正确,则可以通过相应的调试环境
来跟踪调试,因此需要用到gdb。
比如,用来查看文件,设置断点,运行程序,查看变量,表达式的值等等,其中的step ,next 等很是重要:单步执行:step 、next,step 命令步入函数,而next 命令步过函数。
step up 将一直执行,直至当前函数将控制返回调用它的函数为止。
另外常见的gdb 命令还有file,kill,list,run,quit,make 等。