Удаленная отладка процесса Linux из Windows с помощью gdb и gdbserver: что именно нужно на стороне Windows?
Я запускаю Eclipse CDT в Windows для разработки кода C, который построен и протестирован на удаленных Linux-системах. В настоящее время код никогда не компилируется в Windows.
Я могу использовать CDT для запуска удаленного процесса на целевой Linux под gdbserver, а затем присоединить gdb от хоста Windows. Однако gdb сразу же с ошибками:
warning: A handler for the OS ABI "GNU/Linux" is not built into this configuration
of GDB. Attempting to continue with the default i386 settings.
[...]
Remote 'g' packet reply is too long: 74afe9bff0aee9bf02000000f4af4a00a0aee9bf[...]
Отладка между двумя системами Linux работает нормально, поэтому ясно, что я делаю что-то не так на стороне хоста Windows. Мои конкретные вопросы:
-
Является ли версия ggb для Cygwin достаточной для отладки удаленных процессов Linux или мне нужен специальный cross-gdb, чтобы запустить его в Windows и работать с процессами Linux? Если да, то где-нибудь я могу получить такой gdb?
-
Удаленная отладка с помощью gdb требует наличия символов в хост-системе. Каков самый простой способ достичь этого? Могу ли я просто скопировать символы, созданные сборкой на целевой Linux-платформе, на хост Windows, или вам нужно получить полную сборку в Windows? Есть ли способ избежать этого требования, чтобы я мог предоставлять символы только на цель?
Спасибо,
-R
Дополнительная информация: RSE FAQ содержит некоторые указатели, но, к сожалению, я все еще заблокирован. FAQ описывает два подхода:
- Запустите клиент gdb в удаленной системе поверх ssh. Проблема здесь в том, что определенные поля в пусковой установке отладки CDT привязаны к локальной системе (путь к проекту, исполняемый путь и т.д.).
- Создайте/получите кросс-отладочную версию gdb, которая поддерживает отладку процессов Linux из Windows. Проблема здесь в том, что мало информации о том, как достичь этого.
Я также поднял эту проблему на форуме CDT.
Ответы
Ответ 1
Настройка кросс-компиляции или кросс-отладочной среды с помощью gcc/gdb - очень сложная проблема, и это почти никогда не является самым эффективным решением. Ввод виртуальной машины Linux в окно Windows и отладка там будет намного меньше. Если вам действительно нужно отлаживать "там", я бы предложил просто ssh-ing и использовать gdb командной строки. Если у вас не может быть источника, удаленная отладка с виртуальной машины под вашим контролем будет практичной.
Ответ 2
Теперь есть плагин
http://marketplace.eclipse.org/content/direct-remote-c-debugging
Это позволяет запускать gdb на сервере удаленно через ssh. Он заботится о картировании пути и других вещах.
Вам не нужен сервер gdb для удаленного запуска
Ответ 3
Просто перестройте gdb с поддержкой целевой платформы. Вы можете использовать Cygwin для этого.
Пример для целевой платформы RHEL:
> wget http://ftp.gnu.org/gnu/gdb/gdb-<ver>.tar.xz
> tar -xJvf gdb-<ver>.tar.xz
> mkdir -p gdb-<ver>/build/x86_64-redhat-linux-gnu
> cd gdb-<ver>/build/x86_64-redhat-linux-gnu
> ../../configure --target=x86_64-redhat-linux-gnu
> make && make install
> x86_64-redhat-linux-gnu-gdb.exe --version
Не забудьте переконфигурировать свою инструментальную цепочку после этого.
Чтобы получить имя целевой конфигурации, вы можете использовать:
> echo ${BASH_VERSINFO[5]}
Ответ 4
В Visual Studio Community Edition 2017 реализованы инструменты кросс-компиляции и отладки GDB. Поделитесь этим с Linux-сервером или подсистемой Windows Linux, и вы можете надежно разработать C-код для Linux-систем. проверьте это руководство.