Как настроить Eclipse для удаленной отладки C с помощью gdbserver?

Я новичок в Eclipse. Попытка настроить удаленную отладку.

Вот ситуация, я подключаюсь к удаленной машине под управлением Linux, я запускаю Windows.

1) Я установил все необходимые инструменты для Eclipse и смог подключиться к машине Linux.

2) Удаленная машина имеет gdbserver

linux1[1]% gdbserver
Usage:  gdbserver [OPTIONS] COMM PROG [ARGS ...]
        gdbserver [OPTIONS] --attach COMM PID
        gdbserver [OPTIONS] --multi COMM

COMM may either be a tty device (for serial debugging), or
HOST:PORT to listen for a TCP connection.

Options:
  --debug               Enable debugging output.

Мне нужно настроить что-либо в gdbserver

3) Что еще мне нужно настроить в Eclipse? для удаленной отладки?

4) Имеет ли значение, что моя версия GDB отличается от удаленной Machine GDB?

Ответ 1

gdbserver требуется больше аргументов. Например, скажите gdbserver localhost:1337 yourprogram yourprogramarguments и продолжайте работать.

Затем в Eclipse создайте новую конфигурацию отладки для "C/С++ Application". На основной вкладке внизу, выберите GDB (GSF) Remote System Process Launcher в качестве запуска. На вкладке отладчика выберите gdbserver Debugger в качестве отладчика. Под соединением скажите TCP как тип подключения и укажите localhost:1337 как адрес. При запуске конфигурации вы можете управлять удаленным gdb, введя команды в консоль.

Ответ 2

Проверка конфиденциальности CLI

Прежде чем что-либо сделать, убедитесь, что вы:

Этот ответ предполагает, что вы можете сделать это на доске разработки:

sudo apt-get install gdbserver
gdbserver :1234 path/to/executable

И на хосте:

aarch64-linux-gnu-gdb \
  -ex "target remote board-hostname:1234" \
  -ex "file path/to/cross/compiled/executable" \
  -ex 'tb main' \
  -ex c

а затем отлаживайте все правильно.

Настройка Eclipse

Протестировано в хосте Ubuntu 16.04, Eclipse Oxygen 4.7.0 (загружено с веб-сайта), gdbserver 7.12, aarch64-linux-gnu-gdb 7.6.

Я успешно использовал все следующие методы:

  • руководство
  • автоматический
    • пароль auth
    • открытый ключ auth

Руководство

С помощью этого метода перед запуском debug на Eclipse мы должны запустить gdbserver в целевой среде.

Pro: позволяет настраивать соединения SSH через Eclipse, чтобы позволить Eclipse запускать gdbserver, что является еще одной возможной точкой отказа.

Con: вы должны перезапускать gdbserver при каждом запуске отладки. Это можно было бы преодолеть, если бы Eclipse понял gdbserver --multi, но я не думаю, что это так?

Из-за своей простоты я рекомендую вам сначала запустить этот метод.

Откройте конфигурацию отладки, затем создайте новое "Удаленное приложение C/С++".

Под вкладкой "Главная":

  • выберите "Имя", "Проект" и "Приложение C/С++", как обычно, для локальной отладки

  • в нижней панели запуска нажмите "Выбрать другое", установите флажок "Использовать настройки конфигурации" и выберите "Пуск удаленной отладки GDB (DSF)"

    Зачем мы это делаем: автозапуск сначала подключается к плате с SSH и запускает gdbserver для вас.

    введите описание изображения здесь

Под вкладкой "Отладчик":

  • "Отладчик GDB": тот же, что и в CLI на хосте, aarch64-linux-gnu-gdb для этого примера

  • Подкладка "Соединение": укажите имя хоста и порт, переданные хосту в CLI (board-hostname и 1234)

    введите описание изображения здесь

    введите описание изображения здесь

Наконец, вручную запустите gdbserver на цель так же, как мы сделали из CLI:

gdbserver :1234 path/to/executable

и обычно запускайте отладчик из Eclipse.

Вы должны перезапустить gdbserver каждый раз, когда вы завершаете программу.

Автоматически с паролем auth

Это лучший способ для советов разработчиков, у которых есть фиксированные общедоступные пароли.

Он подключается к цели с SSH и паролем и запускает gdbserver в цель автоматически каждый раз, что очень удобно!

Target gdbserver stdout переходит в окно консоли "Eclipse", что дополнительно уменьшает переключение окон.

В наборе Eclipse:

Автоматически с открытым ключом

Очень похоже на аутентификацию пароля, за исключением того, что вы должны перейти к: "Подключение", "Создать" и выбрать "Аутентификация на основе открытого ключа"

Плюсы:

  • преодолевает "Безопасное хранилище не удалось сохранить главный пароль", если у вас есть незашифрованный закрытый ключ (небезопасный, но отлично подходит для отпечатков).
  • для серверов, вероятно, вы уже настроили открытый ключ

Минусы:

  • установка ключа может повредить в первый раз
  • необходимо выполнить повторную настройку ключа всякий раз, когда devboard отключен.

поэтому я бы предпочел этот метод для серверов.

SSH может подключаться без пароля, если вы:

Прежде чем использовать этот метод, убедитесь, что ваши авторизованные ключи работают из командной строки, то есть теперь вы сможете:

ssh [email protected]

без ввода пароля.

Ответ 3

Обновление для Eclipse 2019-03

В eclipse 2019 вышеуказанные шаги не сработали, потому что Eclipse изменил макет конфигурации в "C/C++ Remote Application".

Обновления сообщения @Ciro:

Следующие шаги работали со мной: В разделе "Конфигурации отладки" В разделе "C/C++ Remote Application" Под вкладкой "Основные":

  • выберите "Соединение" ==> "Удаленный хост".
  • выберите "Новый", "SSH" (в моем случае), затем введите конфигурацию для вашей удаленной целевой машины.
  • в "Путь к удаленному абсолютному файлу для приложения C/C++:" укажите путь к приложению на целевом/удаленном устройстве.

На вкладке "Отладчик":

  • Под вкладка "Соединение" удалена.
  • Добавлена новая подвкладка "Настройки Gdbserver".
  • Настройте "Gdbserver path:", чтобы он указывал на путь gdbserver. В моем случае это был "/usr/bin/gdbserver"
  • Настройте номер порта

Это единственные изменения, которые я сделал, чтобы предыдущий ответ работал со мной.