如何交互式调试 MIPS

oko*_*vko 5 gdb mips

我正在学习计算机组织和组装课程。

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

我习惯使用gdb进行调试和学习,我们上课使用的调试器是SPIM。SPIM 很糟糕。它允许我单步执行程序,但不允许我在任意执行点交互式执行 MIPS 指令。我立即厌倦了必须退出 SPIM,编辑源代码,然后再次运行 SPIM,导航到所需的执行点,却发现我必须再次执行此操作,因为我又犯了另一个错误。

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

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

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

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

小智 3

您可以用作qemu模拟器、gdb调试器和gcc编译器。它是研究不同架构的通用工具集。

对于 Ubuntu,您可以使用以下命令安装依赖项(可能您的系统的列表并不完整 - 这取决于您):

sudo apt install gdb-multiarch qemu qemu-user gcc-multilib gcc-multilib-mips64-linux-gnuabi64
Run Code Online (Sandbox Code Playgroud)

现在您可以用作gcc编译器。

$ cat code.c 
#include<stdio.h>

int main()
{
    printf("Hello world!\n");
    return 0;
}
$ mips64-linux-gnuabi64-gcc code.c -static -g3
Run Code Online (Sandbox Code Playgroud)

qemu并通过调试会话启动模拟:

$ qemu-mips64 -g 1234 ./a.out
Run Code Online (Sandbox Code Playgroud)

使用时gdb-multiarch遵循以下例程:

symbol-file a.out
set arch mips:isa64
target remote :1234
b main
c
Run Code Online (Sandbox Code Playgroud)

这是你的目标:

(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
Run Code Online (Sandbox Code Playgroud)

我相信,您可以根据您的任务调整它。正如您在命令MIPS中所看到的,arch 是如此多种多样。gdb set arch