Удаленная отладка процесса 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-систем. проверьте это руководство.