gdb-multiarch-mcp
gdb-multiarch-mcp
一个 MCP(模型上下文协议)服务器,使 Claude 等 AI 助手能够直接访问 gdb-multiarch,以调试在 Yuzu 或带有 GDB 存根的真实主机上运行的任天堂 Switch 可执行文件。
该分支构建于 Ipiano/gdb-mcp 之上,增加了针对 Switch 的调试工具,用于基于偏移量的断点、指令修补(NOP/存根/替换)、帧指针回溯和地址定位——所有这些都相对于游戏的基地址 ($main)。
功能
当 Claude(或任何 MCP 客户端)调用 switch_start_session 时,服务器会:
在 WSL 中启动
gdb-multiarch加载 Switch 调试命令 (
.gdbinit.switch)通过
target extended-remote连接到 GDB 存根等待应用程序启动并附加到它
自动将
$main设置为cross2_Release.nss的基地址
此后,所有标准的 GDB 操作和 Switch 专用工具都可以通过 MCP 工具调用来使用。
先决条件
带有 WSL 的 Windows —
gdb-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-multiarch2. 安装 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-mcp3. 添加到 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/Yuzu GDB 存根的 IP 地址 |
|
| GDB 存根端口 |
|
| gdb-multiarch 二进制文件的路径 |
|
| 日志级别 (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/Yuzu,附加到游戏,设置 |
| 断开连接并清理 |
Switch 调试工具
工具 | 描述 |
| 在 |
| 在偏移量处执行 NOP 指令(写入 |
| 在偏移量处存根函数(写入 |
| 用任意值替换偏移量处的指令 |
| 获取相对于 |
| 将绝对地址转换为相对于 |
| 以绝对地址形式回溯(帧指针遍历) |
| 以相对于 |
| 组合:PC 偏移量 + LR 偏移量 + 完整回溯 |
| 内存十六进制转储 |
| 转储偏移量处的 4 条原始指令以便稍后恢复 |
标准 GDB 工具
所有标准的 gdb-mcp 工具也可用:
工具 | 描述 |
| 执行任何 GDB 命令 (CLI 或 MI) |
| 在函数/文件:行号/地址处设置断点 |
| 列出所有断点 |
| 按编号删除断点 |
| 启用断点 |
| 禁用断点 |
| 继续执行 |
| 单步进入 |
| 单步跳过 |
| 暂停正在运行的程序 |
| 标准 GDB 回溯 |
| 列出线程 |
| 切换到线程 |
| 选择堆栈帧 |
| 当前帧信息 |
| 计算 C/C++ 表达式 |
| 帧的局部变量 |
| CPU 寄存器值 |
| 在目标进程中调用函数 |
| 会话状态 |
故障排除
连接时出现 "No route to host"
WSL 网络连接可能会比较棘手。尝试:
确认 SSH 在 WSL 中运行:
sudo service ssh start测试连通性:
nc -vz <switch_ip> 22225如果需要,添加路由:
sudo ip route add 192.168.1.0/24 via <gateway_ip>从 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.switch和attach.py(自动附加脚本)blujay — 原始的
.gdbinit.switch命令GradualSyrup —
print_addr_setup.py(地址到偏移量的解析)Gdbinit (作者: mammon_, elaine, pusillus, mong, zhang le, l0kit, truthix, fG!, gln) — 扩展的
.gdbinit配置
许可证
MIT — 参见 LICENSE。
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