实验一 Linux+gcc+gdb配置
一、实验目的
1.学会使用国产Linux操作系统;
2.了解Linux系统,初步学习Linux的常用命令;
3.学会Linux环境下C语言程序的编辑、编译和运行。
二、实验设备及软件
PC机Windows环境,国产Linux操作系统
三、实验内容
在国产Linux操作系统中安装配置gcc+gdb,用vim编辑helloworld.c源程序(内容不严格限定),编译helloworld.c,运行可执行文件helloworld,体会在Linux下编辑、编译和运行C语言源程序。
四、实验过程及分析
实验过程
一)linux+gcc+gdb配置:
在国产Linux操作系统中安装gcc及gdb等:
1、sudo apt-getupdate
2、sudo apt-getinstall make
3、sudo apt-getinstall gdb
4、sudo apt-getinstall vim
5、sudo apt-getinstall gcc
以下为具体的安装过程:
虚拟机安装

下载好iso格式的系统镜像文件:
uos-desktop-20-professional-hwe-1070-amd64-202412.iso
虚拟机版本:VMware Workstation 17 Pro 17.6.3build-24583834

安装系统版本:Linux:Debian 10.x 64位

虚拟机配置:最大磁盘空间为64g,内存分配为4g

安装虚拟机成功:
打开终端之后分别运行安装gcc及gdb等指令:
1、sudo apt-getupdate
2、sudo apt-getinstall make
3、sudo apt-getinstall gdb
4、sudo apt-getinstall vim
5、sudo apt-getinstall gcc



二)hello world 程序示例
1、mkdir helloworld 建文件夹,并进入到所建文件夹:cd helloworld
2、vimhelloworld.c 创建并编辑C源文件
3、gcc -o helloworld helloworld.c或者gcc helloworld.c -o helloworld
一次完成编译
以下为具体过程:


输入i表示insert,对刚创建的helloworld.c文件进行编辑

同时编辑结束后输入指令:wq进行文件的保存并退出

成功编译并运行
也可以分步进行:
4、gcc- Ehelloworld.c -o helloworld.i //只进行预处理
5、gcc- Shelloworld.i -o helloworld.s//(进行预处理、)编译,产生汇编代码。
6、gcc - chelloworld.s -o helloworld.o //(进行预处理、编译,)产生目标代码
7、gcchelloworld.o -o helloworld

如图分步对helloworld.c进行了编译操作
至此,可以使用ls命令查看你所建文件夹里是否有helloworld.c,helloworld.i,helloworld.s,helloworld.o以及helloworld。

此时使用ls指令,如图展示了文件夹目录下的所有文件
8、gcc-ghelloworld.c-ohelloworld(生成可执行文件,带调试信息)
9、./helloworld//执行
10、gdb helloworld//调试
list
b 5
n
quit

如图对helloworld.c进行了gdb调试:
用list查看了源代码,b 5设置了一个断点,最后用quit退出了调试实验分析
1.首先我进行了虚拟机的安装,下载好iso格式的系统镜像文件:uos-desktop-20-professional-hwe-1070-amd64-202412.iso;虚拟机版本:VMware Workstation 17 Pro 17.6.3build-24583834;虚拟机的配置考虑到国产linux系统的备份等系统文件(约50g)所以设置了64g大小的磁盘存储空间与4g的内存分配,结构设置,保证虚拟机运行流畅并能顺利完成实验。
2.虚拟机安装完毕之后,直接启动UOS系统并进入到终端界面:通过指令安装gcc及gdb等配置:sudo apt-getupdate、sudo apt-getinstall make、sudo apt-getinstall gdb、sudo apt-getinstall vim、sudo apt-getinstall gcc,通过这些指令,进行了gcc及gdb的安装(sudo是用于获取管理员权限;apt-get是用与linux系统中软件包的安装)
3. 安装完相关指令后开始进行下一步:先是用mkdir的指令创建一个名为helloworld文件夹,随后使用cd指令进入刚刚我们创建的文件夹目录,使用vim创建名为helloworld.c的C语言源文件,创建好之后,这时候按i键表示insert插入,从而进入源文件的编辑页面,编写好打印hello world的代码,然后输入:wq进行代码的保存并退出,随后输入gcc -o helloworld helloworld.c来进行程序的编译,编译成功后通过/.helloworld来运行编译好的程序,成功打印出了helloworld,实现了在国产操作系统上第一次输出helloworld
4.在这之后,我尝试进行分布编译的指令,所以创建了名为experiment的文件夹,重新重复上述操作;输入gcc- Ehelloworld.c -o helloworld.i进行预处理,再输入gcc- Shelloworld.i -o helloworld.s编译,产生汇编代码;再用gcc - chelloworld.s -o helloworld.o进一步预处理、编译,产生目标代码;最后gcchelloworld.o -o helloworld 完成编译,成功实现了分布编译并运行出了正确结果
5.最后学习代码的调试方法:gdb helloworld进行调试,list用于浏览完整代码,b 5表示在第五行设置了一个断点,n表示执行下一行代码,q则是用于退出调试
五、实验总结与感受
实验核心成果
1.成功安装本地虚拟机
2.软件包配置完成:借助apt-get命令顺利安装gcc编译器、gdb调试工具及vim编辑器,经检验各工具均能正常运行,为Linux环境下的C语言开发搭建起基础环境。
3.程序开发流程贯通:从运用mkdir创建项目文件夹,到使用vim编写helloworld.c源文件,再经由gcc完成编译(包含带调试信息的编译操作),最终实现./helloworld命令运行程序,完整打通了Linux下C语言基础开发的全流程。
4.调试功能初步实践:启动gdb调试工具后,尝试运用list查看代码、b 5设置断点等命令,初步掌握了gdb调试的基础操作逻辑,为后续复杂程序的调试工作奠定了基础。
实验收获与体会
Linux操作能力提升:熟练掌握了apt-get(安装/更新软件)、mkdir(创建文件夹)、cd(切换目录)等常用命令,对Linux终端操作的逻辑与效率形成了更直观的认知,有效打破了对Linux系统的陌生感;学会了gcc(编译)、gdb(调试)、vim(编辑)各自的功能定位,理解了“编辑、编译、运行、调试”的开发闭环,相较于Windows图形化开发环境,更清晰地体会到工具链协同工作的过程;问题解决思维培养:当遇到终端报错(如gdb命令顺序错误、依赖提示等)时,学会通过查看报错信息、梳理操作流程来排查问题,而非依赖图形化界面的引导,显著提升了自主解决技术问题的能力。
-o | 指定输出的文件名 |
-c | (注意是小写c)进行预处理、编译,产生目标代码。输出的文件后缀默认为.o |
-g | 产生符号调试工具(GNU的GDB)所必要的符号信息,要想对源代码进行调试,必须加入这个选项。 |
-E | 只进行预处理,结果输出到标准输出,除非用-o指定输出文件(一般指定文件后缀为.i) |
-S | 进行预处理、编译,产生汇编代码。输出的文件后缀默认为.s。 |
Linux常用命令:
下面是一些常见Linux命令的简写全称:
1. ls:列出目录中的文件和子目录(list)
2. cd:改变当前工作目录(change directory)
3. pwd:显示当前工作目录(print working directory)
4. cat:连接文件/显示文件内容(concatenate)
5. rm:删除文件或目录(remove)
6. cp:复制文件或目录(copy)
7. mv:移动文件或目录(move)
8. chmod:修改文件或目录的权限(change mode)
9. chown:修改文件或目录的所有者(change owner)
10. chgrp:修改文件或目录的组所有者(change group)
11. mkdir:创建目录(make directory)
12. rmdir:删除目录(remove directory)
13. touch:创建空文件或者更新文件的时间戳
14. echo:输出文本或变量的内容
15. grep:在文件中搜索指定的模式(global regular expression print)
16. tar:打包和解包文件(tape archive)
17. gzip:压缩文件(GNU zip)
18. unzip:解压缩文件
19. ping:测试与远程主机的连接
20. ifconfig:配置网络接口信息(interface configuration)
21.less:逐页显示文件内容。
22.su : switch user(切换用户) 23.sudo:Superuser do 即以超级用户'root 用户'的方式执行命令
24.reboot: Restart your computer 重启计算机
如果你想退出当前用户回到原来的用户,你可以简单地在命令行中输入exit或按下Ctrl+D。
Poweroff:在 root 下输入命令“poweroff”或者用sudo poweroff,关闭 Linux 。
除了上述命令,Linux还有许多其他常用命令和应用程序,一般情况下,命令的简写全称与命令的功能和操作有关,用户可以通过man命令来查看每个命令的详细用法和参数选项。
vim 有三个模式,不同模式下实现不同功能的命令
1、 normal mode :刚进入的模式,无法输入字符,可以用上下箭头键移动光标等,
该模式下常用命令有:
dd 删除一行;
……
2、 Insert mode : 在 normal mode 下输入 a、i 或 o,可以输入或插入字符等,该模
式下常用命令:
a 在光标之后插入字符
i 在光标之前插入字符
o 在当前行之下新开一行
健退出 Insert mode 模式,进入 normal mode 模式
……
3、 Command-Line mode:在 normal mode 下输入“:”,可以保存或退出等命令,
该模式下常用命令:
q! 不保存退出 vim
wq! 保存并退出 vim
w 保存文件不退出
健退出Command-Line mode 模式,进入 normal mode 模式