Можно ли использовать GDB в кросс-скомпилированном приложении win32 на целевой платформе - PullRequest
5 голосов
/ 15 сентября 2010

Это полный вопрос, но в основном я хочу знать, могу ли я использовать GDB в приложении, скомпилированном для i686-pc-mingw на кросс-компиляторе Linux. Я хочу отладить полученную программу в окне окон назначения с ссылками на исходный код и т. Д.

Возможно ли это, и если да, что мне нужно принять во внимание (то есть, ту же версию файлов mingw, те же binutils, тот же относительный путь к исходному коду и т. Д ...)?

Одна вещь, которая меня бросает в глаза, это номера версий GCC и GDB, похоже, не совпадают. Как узнать, будут ли версии совместимы?

Если эти вопросы звучат глупо, то только потому, что я не слишком много использовал GDB, я просто хочу начать, поэтому я не пытаюсь угадать, что сломалось.

Ответы [ 2 ]

6 голосов
/ 16 сентября 2010

Да, вы должны иметь возможность использовать GDB на хосте Linux для отладки исполняемого файла, работающего на i686-pc-mingw.

Терминология: система i686-pc-mingw - ваша цель, система Linux - вашаhost.

  • У вас уже есть linux -компилированный хост, который нацелен на i686-pc-mingw.
  • Вам необходимо создать gdbserver для вашей цели (используя ваш кросс-компилятор).
  • Вам также нужно собрать gdb (используя нативный, не кросс-компилятор).gdb необходимо настроить для --host=x86-linux и --target=i686-pc-mingw.По сути это перекрестный gdb - он работает в Linux, но отлаживает исполняемые файлы mingw.

Теперь запустите gdbserver :0 foo.exe (на цели).Это должно напечатать номер порта, на котором gdbserver прослушивает соединения.

Запустите gdb foo.exe (на хосте) и подключитесь к удаленной цели с помощью target remote <windows-target-host-name>:<gdbserver-port-number>, и вы должны быть в бизнесе.

PS
GCC и GDB - это совершенно отдельные проекты, их версии не имеют ничего общего друг с другом.Вы должны быть в состоянии построить GDB, используя любую относительно недавнюю версию GCC.

0 голосов
/ 27 августа 2015

ОК, оказывается, это возможно, используя "родной" GDB.

По сути, вы загружаете нативный gdb.exe (32- или 64-битный, соответствующий вашему исполняемому файлу) и кросс-компилируете свой .exe «с символами отладки» (например, gcc -g source.c create a.exe).

Затем скопируйте a.exe в свою цель, запустите ее как gdb a.exe, и вы можете установить точки останова, проверить переменные и т. Д. Если вы также хотите получить доступ к исходному коду во время его отладки, вы можете скопировать свой исходный код. код для вашего окна окна, а затем запустить gdb a.exe из каталога, где находится ваш источник, чтобы он выстроился в линию. Конечно, вам понадобится / понадобится стенографическая копия исходного кода, но тогда у вас будет собственный отладчик с полным исходным кодом.

Если вы хотите запустить отладчик «из linux» (одним преимуществом является более легкий доступ к актуализированному источнику), пока ваша программа работает в окне Windows, посмотрите другой ответ. Я предполагаю, что есть также возможность использовать отладчик Wine для запуска его «в Linux», хотя я никогда не пробовал таким образом.

...