我正在学习计算机组织和组装课程。
[在课堂上,我们正在学习MIPS。这是为了介绍诸如流水线之类的基本概念。我们正在为课堂编写一些简单的MIPS程序。
我习惯于gdb进行调试和学习,我们在课堂上使用的调试器是SPIM。 SPIM很烂。它允许我单步执行程序,但不允许我在任意执行点以交互方式执行MIPS指令。我立即厌倦了不得不退出SPIM,编辑源代码并再次运行SPIM,导航到所需的执行点,只是看到我不得不再次做,因为我犯了另一个错误。
或者也许我弄错了,SPIM确实允许这样做。我的老师说不支持此功能,所以我不接受他说的话。我在Google上搜索了一下,但没有找到解决方法。
我已经尝试使用gdb等交互式MIPS调试器进行谷歌搜索,但没有找到任何。我知道gdb可以调试MIPS程序,但是我没有MIPS机器来运行MIPS程序。
我在VMware中运行Ubuntu。如何使用gdb或其他方式交互式调试MIPS程序?
您可以将qemu
用作仿真器,gdb
用作调试器,将gcc
用作编译器。它是研究不同体系结构的通用工具集。
对于Ubuntu,您可以使用以下命令安装依赖项(可能,系统列表不完整-完全由您决定):
sudo apt install gdb-multiarch qemu qemu-user gcc-multilib gcc-multilib-mips64-linux-gnuabi64
现在您可以将gcc
用作编译器。
$ cat code.c
#include<stdio.h>
int main()
{
printf("Hello world!\n");
return 0;
}
$ mips64-linux-gnuabi64-gcc code.c -static -g3
并通过调试会话在qemu
中开始仿真:
$ qemu-mips64 -g 1234 ./a.out
在gdb-multiarch
中,使用以下例程:
symbol-file a.out
set arch mips:isa64
target remote :1234
b main
c
这是您的目标:
(gdb) x/5i main
0x120003850 <main>: daddiu sp,sp,-32
0x120003854 <main+4>: sd ra,24(sp)
0x120003858 <main+8>: sd s8,16(sp)
0x12000385c <main+12>: sd gp,8(sp)
0x120003860 <main+16>: move s8,sp
我相信,您可以根据自己的任务进行调整。正如您在MIPS
gdb
命令中看到的那样,set arch
拱是如此多样。