linux与gdb命令回顾/bomblab phase1

一、实验内容

1、加深对计算机组成的理解,熟悉汇编语言
2、熟悉linux系统操作
3、学会在linux系统下对程序进行GDB调试

二、相关知识

1、linux系统安装
实验环境是linux系统,选择VMware作为虚拟机安装32位Ubuntu系统作为本门课程实验的实验环境,具体安装步骤在下方给出。
2、linux系统下vim安装
vi编辑器是所有Unix及Linux系统下标准的编辑器,vim是vi编辑器的升级版,支持程序编程,相对于vi来说比较方便。安装命令为:
sudo apt-get install vim-gtk
3、linux系统下GDB认识
gdb(GNU symbolic debugger)是一个由GNU开源组织发布的、UNIX/LINUX操作系统下的、基于命令行的、功能强大的程序调试工具。一般来说,GDB主要帮助你完成下面四个方面的功能:
1、启动你的程序,可以按照你自定义的要求随心所欲的运行程序。
2、可以让调试程序在你所指定的位置的断点处停止。
3、当程序停止时,可以检查此时你的程序中所发生的事情。
4、动态的改变你程序的执行环境。
4、linux系统下编程
首先编写程序产生.c文件,接着使用gcc -E指令实现预编译,生成.i文件,将程序中的库和函数等组合起来,接着使用gcc -S指令对其进行编译,生成.s文件,接着使用gcc -c指令对.s文件进行汇编,产生二进制文件供计算机读取,最后gcc 文件名.o对其进行链接。实际上我们编译器等使用gcc 文件名.c -o 文件名 将上述过程一步到位,直接产生最终文件。另外我们可以用linux命令中的objdump -d 进行反汇编,回到.s文件。
5、linux常用命令
在这里插入图片描述
6、GDB调试常用命令
包括GDB运行,打断点,运行程序,查看变量值,修改变量值,单步执行,查看内存寄存器,反汇编等一系列常用指令。

三、实验步骤

1、linux虚拟机安装
1.去官网下载VMware虚拟机以及Ubuntu32位镜像文件,作为环境搭建原材料。
2.首先运行VMware,对VMware进行安装(安装过程一直点下一步,将其放入一个内存足够的盘中即可),安装成功后打开VMware弹出如下界面:
在这里插入图片描述
3.点击左上角文件->新建虚拟机有如下界面,这里简单起见直接选择典型安装:
在这里插入图片描述
4.选择安装程序光盘映像文件,在下面路径出找到要安装的.iso文件,点击下一步:
在这里插入图片描述
5.有些产品需要输入产品密匙,如Windows正版安装时,而后直接进入用户名的输入,注意用户名需要小写:
在这里插入图片描述
6.之后对要安装的系统找一个足够大的安装位置,最后给该位置分配磁盘大小,点击确定,完成安装。
在这里插入图片描述
7.之后在VMware中开启虚拟机,安装Ubuntu系统,输入自己设置的ID,进入系统。
在这里插入图片描述
2、linux系统下vim安装
1.调出终端,下载vim,我们在终端中先输入vim,如果已经安装vim,会出现如下界面:
在这里插入图片描述
2.否则,输入sudo apt-get install vim进行安装,键入密码后,提示输入Y,而后直接等待安装结束。
3、使用vim进行简单编程
1.由cd Music/进行一个文件夹(此处选择music文件夹,之后在文件夹中创建程序):
在这里插入图片描述
2.在Music文件夹中,输入vim + 程序名.c进行编辑,这里我们做一个简单的加法程序,s输入vim mysum.c:
在这里插入图片描述
3.在Music文件夹中,使用pwd查看路径,ls查看文件夹目录下所有文件:
在这里插入图片描述
4.使用mkdir创建文件夹
在这里插入图片描述
5.使用rmdir删除文件夹
在这里插入图片描述
6.使用clear清除当前终端显示的内容
在这里插入图片描述
7.在vim中,分命令模式和输入模式,按i键进入输入模式,我们输入代码后,按esc键退出到命令模式,输入:wq进行保存并退出,如果程序处于只读状态,我们输入:wq!强制保存并退出:
在这里插入图片描述
8.下面生成-o文件有两种方式,一种最常用的是gcc 文件名.c,之后默认生成a.out文件,输出时要键入./a.out,如下图所示:
在这里插入图片描述
9.另一种是gcc -g 文件名.c -o 文件名,这种方式形成的文件自定义了输出文件的名字,比如gcc -g mysum.c -o mysum,输出时输入./mysum即可:
在这里插入图片描述
10.在相应的Music文件夹中可以找到源文件:
在这里插入图片描述
4、GDB下对程序进行调试
1.启动gdb
2.打开文件,导入调试环境,使用gdb 文件名即可,如gdb mysum:
在这里插入图片描述
3.(gdb) l为查看源代码指令,并且l后面加上行数可以指定输出到某一行,否则每10行一个输出:
在这里插入图片描述
4.(gdb) b 行数 该语句对当前行数设置断点,程序运行时运行到该行停止,并输入下面将要执行一行信息:
在这里插入图片描述
5.(gdb) info b 查看所有断点信息(加断点编号可以查看某一个断点信息)
在这里插入图片描述
在这里插入图片描述
6.delete 断点编号 删除该断点
在这里插入图片描述
7.(gdb) r 程序从main运行,并运行到指定断点结束:
在这里插入图片描述
8.(gdb) p 变量名,输出当前要查找变量名信息:
在这里插入图片描述
这里由于没有附初始值,n和m为一个随机值。
其他打印变量指令为:print/display 变量名 打印该变量的值
print/display {变量名1, 变量名2,……} 同时打印多个变量
9.(gdb) c,继续执行程序,直到下一个断点:
在这里插入图片描述
可以看到由于输入之后,n和m的值已经发生了改变,继续运行程序直到结束:
在这里插入图片描述

10.set var 变量名=变量的值 可以修改变量的值
在这里插入图片描述
11.执行程序之后我们还可以简单查看当前寄存器的值,(gdb) i r就实现了这个功能,如果后面加上寄存器,还可以查看寄存器的值:
在这里插入图片描述
这里我们在运行到输入n和m之后,未做sum之前,看到寄存器的值,可以看到eax和edx被赋值。
12.最后,利用display /ni $pc可以查看整个程序反汇编语言,其中n为行数,如果n不键入,输入之后重新运行程序,可以对每一行输出其反汇编语言:
在这里插入图片描述
13.x/<n/f/u> 从addr内存地址开始,以u对应的字节数为一个单位,以f格式显示n个单位的内存数据。
在这里插入图片描述
14.q退出GDB,kill退出当前当前命令程序

在这里插入图片描述
在这里插入图片描述

四、遇到的问题及解决方法

1、使用gdb打开文件mysum时没有该文件。
在这里插入图片描述
解决方法:导致该问题的原因是未用gcc -g进行处理,解决方法为gcc -g进行预处理。
在这里插入图片描述
2、课上vim编辑代码报错
在这里插入图片描述
解决方法:导致该问题的原因是vim编辑器for循环中不能进行命名变量:
在这里插入图片描述
解决方法为:将上图中黄色框内命名变量语句提出来:
在这里插入图片描述

五、实验心得体会

Linux系统基于用户命令符完成各个操作,通过对gcc以及vim使用,相对于Windows系统更加方便快捷,我们使用gdb调试时,每一步可以清楚的看到该步结束后调试的结果如何,利用各种指令,方便的对程序进行调试。通过本实验熟悉了Linux操作系统,通过对终端的使用,用基本的命令行语句调出文本编辑器进行简单的c语言文本编辑保存和运行,同时调试作为代码生长周期重要的一环,Linux也提供了一个最重要的调试方式GDB调试,通过一系列指令操作,完成对一个代码的断点设置,运行,单步进入以及查看寄存器和汇编指令等,受益匪浅。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值