如何以交互方式调试 MIPS



我正在上一门关于计算机组织和汇编的课程。

在课堂上,我们正在学习MIPS。这是为了介绍基本概念,如流水线。我们正在为课堂编写一些简单的MIPS程序。

我习惯了 gdb 进行调试和学习,我们在课堂上使用的调试器是 SPIM。斯皮姆很烂。它允许我逐步执行程序,但不允许我在任意执行点交互式执行MIPS指令。我立即厌倦了必须退出 SPIM、编辑源代码并再次运行 SPIM,导航到所需的执行点,只是看到我必须再次执行此操作,因为我又犯了一个错误。

或者也许我弄错了,SPIM 确实允许这样做。我的导师说不支持此功能,所以我就不干他的话了。我用谷歌搜索了一下,没有找到解决方法。

我尝试在谷歌上搜索交互式MIPS调试器,如gdb,但我没有找到。我知道gdb可以调试MIPS程序,但我没有MIPS机器来运行MIPS程序。

我在VMware中运行Ubuntu。如何使用 gdb 或其他方式交互式调试 MIPS 程序?

编辑:在他们推荐的Linux工具链上找到了一些关于 Mips.com 的参考资料。

您可以将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正如您在gdbset arch命令中看到的那样。

最新更新