Skip to main content
Glama
sbergeron42

gdb-multiarch-mcp

by sbergeron42

gdb-multiarch-mcp

一个 MCP(模型上下文协议)服务器,使 Claude 等 AI 助手能够直接访问 gdb-multiarch,以调试在 Yuzu 或带有 GDB 存根的真实主机上运行的任天堂 Switch 可执行文件。

该分支构建于 Ipiano/gdb-mcp 之上,增加了针对 Switch 的调试工具,用于基于偏移量的断点、指令修补(NOP/存根/替换)、帧指针回溯和地址定位——所有这些都相对于游戏的基地址 ($main)。

功能

当 Claude(或任何 MCP 客户端)调用 switch_start_session 时,服务器会:

  1. 在 WSL 中启动 gdb-multiarch

  2. 加载 Switch 调试命令 (.gdbinit.switch)

  3. 通过 target extended-remote 连接到 GDB 存根

  4. 等待应用程序启动并附加到它

  5. 自动将 $main 设置为 cross2_Release.nss 的基地址

此后,所有标准的 GDB 操作和 Switch 专用工具都可以通过 MCP 工具调用来使用。

先决条件

  • 带有 WSL 的 Windowsgdb-multiarch 在 WSL 中运行(已在 Debian 上测试)

  • 在 WSL 中安装 gdb-multiarch (sudo apt install gdb-multiarch)

  • WSL 中的 Python 3.10+

  • GDB 存根 — Yuzu 内置的 GDB 存根或带有 sys-gdbstub 的 Switch

  • Claude Code(或任何兼容 MCP 的客户端)

安装

1. 在 WSL 中安装 gdb-multiarch

wsl -d Debian
sudo apt install gdb-multiarch

2. 安装 MCP 服务器

在 Windows 中运行:

wsl.exe -d Debian -e bash -c 'export PATH=$HOME/.local/bin:$PATH && pip install --break-system-packages -e /mnt/c/path/to/gdb-multiarch-mcp'

或者在 WSL 内部运行:

pip install -e /mnt/c/path/to/gdb-multiarch-mcp

3. 添加到 Claude Code

claude mcp add gdb-multiarch -s user -- wsl.exe -d Debian -e bash -c "export PATH=\$HOME/.local/bin:\$PATH && python3 -m gdb_multiarch_mcp"

或者手动添加到你的 .claude.json

{
  "mcpServers": {
    "gdb-multiarch": {
      "type": "stdio",
      "command": "wsl.exe",
      "args": [
        "-d", "Debian", "-e", "bash", "-c",
        "export PATH=$HOME/.local/bin:$PATH && python3 -m gdb_multiarch_mcp"
      ]
    }
  }
}

4. 验证

claude mcp list

你应该会看到 gdb-multiarch: ... - Connected

配置

在 WSL 中设置这些环境变量以自定义连接:

变量

默认值

描述

SWITCH_IP

192.168.1.235

Switch/Yuzu GDB 存根的 IP 地址

SWITCH_PORT

22225

GDB 存根端口

GDB_PATH

gdb-multiarch

gdb-multiarch 二进制文件的路径

GDB_MCP_LOG_LEVEL

INFO

日志级别 (DEBUG, INFO, WARNING, ERROR)

要设置这些变量,请将 env 添加到你的 MCP 配置中:

{
  "mcpServers": {
    "gdb-multiarch": {
      "type": "stdio",
      "command": "wsl.exe",
      "args": ["..."],
      "env": {
        "SWITCH_IP": "192.168.1.100",
        "SWITCH_PORT": "22225"
      }
    }
  }
}

可用工具

会话管理

工具

描述

switch_start_session

连接到 Switch/Yuzu,附加到游戏,设置 $main请首先调用此工具。

switch_stop_session

断开连接并清理

Switch 调试工具

工具

描述

switch_break_at

$main+offset 处设置断点

switch_no_op

在偏移量处执行 NOP 指令(写入 0xD503201F

switch_stub

在偏移量处存根函数(写入 RET / 0xD65F03C0

switch_replace

用任意值替换偏移量处的指令

switch_get_pc

获取相对于 $main 的偏移量形式的 PC

switch_localize

将绝对地址转换为相对于 $main 的偏移量

switch_my_bt

以绝对地址形式回溯(帧指针遍历)

switch_my_bt2

以相对于 $main 的偏移量形式回溯

switch_print_trace

组合:PC 偏移量 + LR 偏移量 + 完整回溯

switch_xxd

内存十六进制转储

switch_prepare_rehook

转储偏移量处的 4 条原始指令以便稍后恢复

标准 GDB 工具

所有标准的 gdb-mcp 工具也可用:

工具

描述

gdb_execute_command

执行任何 GDB 命令 (CLI 或 MI)

gdb_set_breakpoint

在函数/文件:行号/地址处设置断点

gdb_list_breakpoints

列出所有断点

gdb_delete_breakpoint

按编号删除断点

gdb_enable_breakpoint

启用断点

gdb_disable_breakpoint

禁用断点

gdb_continue

继续执行

gdb_step

单步进入

gdb_next

单步跳过

gdb_interrupt

暂停正在运行的程序

gdb_get_backtrace

标准 GDB 回溯

gdb_get_threads

列出线程

gdb_select_thread

切换到线程

gdb_select_frame

选择堆栈帧

gdb_get_frame_info

当前帧信息

gdb_evaluate_expression

计算 C/C++ 表达式

gdb_get_variables

帧的局部变量

gdb_get_registers

CPU 寄存器值

gdb_call_function

在目标进程中调用函数

gdb_get_status

会话状态

故障排除

连接时出现 "No route to host"

WSL 网络连接可能会比较棘手。尝试:

  1. 确认 SSH 在 WSL 中运行sudo service ssh start

  2. 测试连通性nc -vz <switch_ip> 22225

  3. 如果需要,添加路由sudo ip route add 192.168.1.0/24 via <gateway_ip>

  4. 从 Windows PowerShell 进行端口代理

netsh interface portproxy add v4tov4 listenport=22225 listenaddress=127.0.0.1 connectport=22225 connectaddress=<switch_ip>

GDB 存根无响应

  • 在调用 switch_start_session 之前,确保游戏正在 Yuzu/Switch 上运行

  • 验证 Yuzu 的 GDB 存根已在 Emulation > Configure > Debug > Enable GDB Stub 中启用

会话已在运行

先调用 switch_stop_session,然后再调用 switch_start_session

制作人员

  • Ipiano/gdb-mcp (作者: Andrew Stelter) — 本项目所基于的上游 GDB MCP 服务器

  • Coolsonickirby/smash-ultimate-research-setup — 本项目使用的修改版 .gdbinit.switchattach.py(自动附加脚本)

  • blujay — 原始的 .gdbinit.switch 命令

  • GradualSyrupprint_addr_setup.py(地址到偏移量的解析)

  • Gdbinit (作者: mammon_, elaine, pusillus, mong, zhang le, l0kit, truthix, fG!, gln) — 扩展的 .gdbinit 配置

许可证

MIT — 参见 LICENSE

Install Server
A
security – no known vulnerabilities
A
license - permissive license
B
quality - B tier

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/sbergeron42/gdb-multiarch-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server