Skip to main content
Glama
sbergeron42

gdb-multiarch-mcp

by sbergeron42

gdb-multiarch-mcp

MCP-сервер (Model Context Protocol), который предоставляет ИИ-ассистентам, таким как Claude, прямой доступ к gdb-multiarch для отладки исполняемых файлов Nintendo Switch, запущенных в Yuzu или на реальной консоли с GDB-заглушкой.

Построенный на базе Ipiano/gdb-mcp, этот форк добавляет инструменты отладки, специфичные для Switch: точки останова по смещению, патчинг инструкций (NOP/stub/замена), трассировку стека по указателю кадра и локализацию адресов — всё относительно базового адреса игры ($main).

Что он делает

Когда Claude (или любой другой MCP-клиент) вызывает switch_start_session, сервер:

  1. Запускает gdb-multiarch внутри WSL

  2. Загружает команды отладки Switch (.gdbinit.switch)

  3. Подключается к GDB-заглушке через target extended-remote

  4. Ожидает запуска приложения и подключается к нему

  5. Автоматически устанавливает $main на базовый адрес cross2_Release.nss

После этого все стандартные операции GDB и инструменты для Switch становятся доступны через вызовы инструментов MCP.

Предварительные требования

  • Windows с WSLgdb-multiarch работает внутри WSL (протестировано на Debian)

  • gdb-multiarch, установленный в WSL (sudo apt install gdb-multiarch)

  • Python 3.10+ в WSL

  • GDB-заглушка — либо встроенная в Yuzu, либо консоль Switch с sys-gdbstub

  • Claude Code (или любой другой MCP-совместимый клиент)

Установка

1. Установите gdb-multiarch в WSL

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

IP-адрес GDB-заглушки Switch/Yuzu

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+смещение

switch_no_op

Инструкция NOP по смещению (записывает 0xD503201F)

switch_stub

Заглушка функции по смещению (записывает RET / 0xD65F03C0)

switch_replace

Заменить инструкцию по смещению произвольным значением

switch_get_pc

Получить PC как смещение относительно $main

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

Значения регистров процессора

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-заглушка не отвечает

  • Убедитесь, что игра запущена в Yuzu/Switch до вызова switch_start_session

  • Проверьте, что GDB-заглушка Yuzu включена в Emulation > Configure > Debug > Enable GDB Stub

Сессия уже запущена

Сначала вызовите switch_stop_session, затем снова switch_start_session.

Авторы

  • Ipiano/gdb-mcp от Andrew Stelter — исходный MCP-сервер для GDB, на котором построен этот проект

  • Coolsonickirby/smash-ultimate-research-setup — модифицированные .gdbinit.switch и attach.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