Удаленная отладка приложений С++ с Eclipse CDT/RSE/RDT
Я борюсь с Eclipse (в Windows), чтобы подключиться к моему ящику Linux и удаленно компилировать и отлаживать код С++.
Что я работаю:
- Установлен CDT/RSE/RDT (Eclipse Juno, CDT 8.1.2, PTP (RDT) 6.0.4, RSE 3.4)
- rdt-server работает под Linux (
perl ./daemon.pl 4075
)
- создать локальные проекты на С++ (на основе Makefile)
- компилировать и отлаживать локальные проекты на С++
- создавать удаленные проекты (используя соединение "Linux" с rdt-сервером)
- компилировать удаленные проекты (на основе Makefile)
Некоторые ручные вещи, которые я могу сделать (без Eclipse):
- "remote" отладить мои скомпилированные проекты:
ssh mybox 'cd /path/to/project; gdb main'
- запустите gdbserver:
ssh mybox 'cd /path/to/project; gdbserver fqdn:10000 main'
Что не работает: Отладка в Eclipse
- debug через "приложение С++" Ошибка: программа не указана (потому что у меня нет локального кода)
- debug через "С++ remote" Ошибка: программа не указана (нужен ли мне локальный код для этого?)
- отладка через "С++ attach" (отладчик: "gdbserver" )
- gdbserver работает на linuxbox
- gdb не может разговаривать с gdbserver (cygwin gdb 7.5, linux gdb/gdbserver 7.3); предупреждение: архитектура отклонила описание, предоставленное цели.
- Отладка через "C++ attach" (отладчик: "gdb" ) попытается подключиться к моим процессам Windows.
Другие проблемы, которые могут вызвать проблемы:
- Я использую двоичный код
ssh
, предоставляемый с MSYS/Git (не на PATH
)
- Cygwin не включен в
PATH
Я действительно хотел бы выполнить удаленную отладку в Eclipse для моих проектов на С++.
Есть ли у вас какие-либо предложения, как исходить отсюда?
Ответы
Ответ 1
"debug через" С++ remote "Ошибка: программа не указана (нужен ли мне локальный код для этого?)"
Да, поскольку символы загружаются из локальной копии кода.
На вкладке отладчика этого типа конфигурации запуска вы найдете настройки для удаленного сервера и порта. Используйте имя и порт машины, которые вы указали при запуске gdbserver.
AFAIK это все равно не будет работать, так как gdb, запущенный на вашей локальной машине Windows, не будет поддерживать отладочную программу linux. Вам понадобится кросс-сборка gdb (сконфигурирована и построена с помощью host = mingw-or-something и target = linux).
Ответ 2
К сожалению, этот вопрос еще не привел к желаемому решению. Тем не менее, вам может быть интересно, как я на самом деле "решил" проблему:
Теперь мы прямо развиваемся на ящиках Linux, делая все дистанционно. Мы настраиваем пользователей настольных систем на ящиках Linux и заходим через VNC для запуска Eclipse и используем его как front-end для gdb
. Хотя VNC не лучшее решение (возможно, мы попробуем NX позже), это решение освобождает нас от любых проблем с gdbserver
или RSE/RDT.
Ответ 3
На данный момент (Luna M6), Eclipse CDT + RDT + RSE, по-видимому, является цепочкой, пропускающей некоторые ссылки, когда вам нужно:
- Запустите IDE на рабочем столе.
- Используйте удаленную инструментальную цепочку в целевой системе для сборки вместо установки локальной перекрестной привязки
- Автоматизировать отладку и запуск для удаленной системы одним кликом (запустить gdbserver, подключиться к нему и предоставить консольный вывод)
Эти требования довольно распространены в настоящее время в отношении обилия платформ ARM для Linux, таких как Raspberry Pi и OLinuxino. Эти платы обычно имеют достаточно ресурсов для запуска инструментальной цепочки, но недостаточно для обеспечения среды удаленного рабочего стола для удаленного запуска среды IDE.
Мое окончательное решение:
После нескольких дней усилий я, наконец, отказался от Eclipse CDT + RDT + RSE для среды удаленного развертывания NetBeans C/С++, которая работает как прелесть для меня.
Ответ 4
Вы можете попробовать этот плагин с Eclipse для параллельной версии приложения
вот ссылка
Он отлично работает при разработке с Windows-машины для программирования на Linux
Ответ 5
Проверка работоспособности с помощью CLI
Прежде чем что-либо сделать, убедитесь, что вы:
- перекрестно скомпилировать приложение и запустить его. Вам не обязательно делать это с помощью Eclipse.
- удаленная отладка GDB удалена из командной строки
Этот ответ предполагает, что вы можете сделать это на доске разработки:
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
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]
без ввода пароля.
Изменить текущий рабочий процесс процесса
Как установить текущий рабочий каталог программы при удаленной отладке с помощью gdbserver Automatic Launcher в Eclipse CDT?