预备实验:安装Linux环境并进行编译和GDB调试

前言

本实验为课程预备实验,要求成功安装linux基本环境,并进行简单程序的编译和GDB调试,从而为后续课程实验搭建基础运行平台。
仅供参考!

一、在所使用的电脑平台上安装linux系统与环境

  1. 下载并安装VMware Workstation Pro
    在这里插入图片描述
  2. 安装成功之后打开VMware
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    经过以上一系列操作便可创建好虚拟机

二、成功在linux系统中使用gcc完成简单c语言的编译和执行

  1. 使用gedit hello.c命令在主文件夹下创建一个hello.c文件
    在这里插入图片描述
  2. 在hello.c文件中编写程序后将其保存
    在这里插入图片描述
  3. 预处理阶段:使用gcc -E hello.c -o hello.i gedit hello.i得到预处理之后的hello.i文件(文本)
    在这里插入图片描述
  4. 编译阶段:使用gcc -S hello.i -o hello.s gedit hello.s得到汇编代码(文本)
    在这里插入图片描述
    在这里插入图片描述
  5. 汇编阶段:使用gcc -c hello.s -o hello.o gedit hello.o得到可重定向目标程序(二进制)
    在这里插入图片描述
    在这里插入图片描述
  6. 链接阶段:使用gcc hello.o -o hello gedit hello得到可执行目标程序(二进制)
    在这里插入图片描述
    在这里插入图片描述
  7. 运行阶段:使用./hello得到运行结果
    在这里插入图片描述

三、使用GDB进行程序基本的程序调试和反汇编

  1. 输入命令gcc -g hello.c -o hello开始调试(-g选项告诉gcc在编译程序时加入调试信息)、输入gdb hello得到以下版本信息说明
    在这里插入图片描述
  2. 输入gdb -q hello可忽略版本信息,得到以下界面
    在这里插入图片描述
  3. 输入file hello,先进入gdb模式,再加载文件,得到以下界面
    在这里插入图片描述
  4. 输入y之后输入list得到以下界面
    在这里插入图片描述
  5. 输入break 4表示在第四行代码处设置断点,得到以下代码
    在这里插入图片描述
    Breakpoint 1表示这是我设置地第一个断点,断点所在地内存地址为0x80483dd,它在文件hello.c的第四行
  6. 输入info breakpoints可查看设置的断点信息,得到以下界面
    在这里插入图片描述
    Num表示断点的编号;Type表示断点的断点的类型;Disp表示中断点在执行一次之后是否失去作用,dis为是,keep为不是;Enb表示当前中断点是否有效,y为是,n为否;Address表示中断点所处的内存地址;What指出断点所处的位置。
  7. 断点设置好之后可以输入run开始调试,得到以下界面
    在这里插入图片描述
  8. 输入next,继续执行下一条语句;还有一条命令step,与之类似,不同的是,当下一条语句遇到函数调用的时候,next不会跟踪进入函数,而是继续执行下面的语句,而step命令则会跟踪进入函数内部。
    在这里插入图片描述
  9. 输入quit退出调试
    在这里插入图片描述

实验结果及分析

经过调试发现代码编译通过且能够运行出正确的结果;
运行结果:Hello world!
这是一条最简单的语句,基本上只要你的固定格式没有出错程序就不会报错。

收获与体会

  1. 在安装VMware Workstation Pro的时候出现了安装不了的情况,安装失败之后试图安装别的版本仍然失败;解决:在任务管理器中关掉了Windows安装程序之后安装成功
  2. 安装成功之后显示我没有权限输入产品密钥,试图以管理员身份打开输入密钥仍然无效;解决:卸载程序之后以管理员身份安装该程序,之后输入密钥成功
  3. 使用Ubuntu进行编译和运行程序的时候输入touch 文件名.c可以在主文件夹目录下创建一个文件名.c文件,找到该文件,在里面编写代码,保存即可
  4. 创建文件也可以使用gedit 文件名.c形式(该文件也会创建在主文件夹目录下)
  5. 指令cd 目录可以更换路径
  6. 预处理/编译/汇编/链接/运行阶段的指令均可参见上面
  7. 如果不需要程序在该断点暂停时,有两种方法,一种是使该断点失效,一种是直接删除该断点。
    在这里插入图片描述
    可以看到此时Enb这一栏中是n,表明断点1失效
  8. 如果需要恢复,可以使用enable命令。这里需要注意的是,disable后面的参数为断点的编号。而不是行号。
    在这里插入图片描述
  9. next表示继续执行下一条语句;还有一条命令step,与之类似,不同的是,当下一条语句遇到函数调用的时候,next不会跟踪进入函数,而是继续执行下面的语句,而step命令则会跟踪进入函数内部。
  10. 可以在gdb的提示符中,输入shell,然后在输入你需要的命令就可以了
    再输入clear可以达到清屏的作用
  11. 直接删除该断点,可以使用clear命令和delete命令。
    在这里插入图片描述
  12. 调试过程设置断点的时候,最好设置在容易出错的地方,这样方便之后的调试,提高效率
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值