Как настроить 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"
- Настройте номер порта
Это единственные изменения, которые я сделал, чтобы предыдущий ответ работал со мной.