Подтвердить что ты не робот

Удаленная отладка GDB

Я провел целый день, пытаясь найти способ включить отладку GDB из Qt Creator или Eclipse. Я узнал, что в основном есть два подхода к запуску целевого приложения:

  • Использование ssh (ssh host gdb)
  • Использование gdbserver

Я смог использовать оба подхода для запуска gdb удаленно и запускать приложение. Однако GDB никогда не отвечает на какие-либо точки останова, установленные в среде IDE. Также я не могу приостановить приложение для проверки состояния программы. В Qt Creator я просто получаю неясную трассировку стека (я мог бы смотреть на следы ssh или gdb на самом деле...).

Кто-нибудь может помочь мне начать?

Прогресс!

Я обнаружил, что с Qt Creator 2.0 есть функция, называемая "Прикрепить и отлаживать удаленное приложение". Он основан на gdbserver. Хорошо, что он останавливается на контрольных точках IDE. Однако есть две проблемы:

  • Когда он достигает точки останова, он показывает только код сборки, а не исходный код.
  • GDB часто уходит из-за "полученного сигнала"

Я должен, вероятно, упомянуть, что удаленный исполняемый файл скомпилирован с более старой версией GCC, чем тот, который установлен на моем локальном ПК. Возможно, некоторые из этих проблем связаны с этим.

Update

Я должен упомянуть, что я переключился на запуск cgdb на удаленном компьютере через SSH.

Удаленное решение на основе Qt Creator не было стабильным. GDB стремится выйти из-за таинственных сообщений, полученных от сигнала.

4b9b3361

Ответ 1

Из-за особенностей нашей системы сборки makefile ссылки на файлы, содержащиеся в отладочных символах, выглядят следующим образом:

../src/main.cpp
../../src/utils/logger.cpp

Это не проблема для GDB, но Qt Creator не смог сопоставить эти пути с фактическими файлами. Я смог исправить это, добавив в исходный файл GDB операторы "dir":

dir src
dir src/utils
...

Теперь он работает.

Ответ 2

Итак, чтобы GDB на вашем хосте (машина, которую вы разрабатываете и компилируете, поэтому, где у вас есть Qt Creator), вы должны предоставить ей доступ к "символьному файлу".

Обычно я не использую Qt Creator, но GDB и gdbserver напрямую для удаленной отладки скомпилированных программ. Возможно, вы можете попытаться убедиться, что это работает для вас и, возможно, затем найдет отсутствующий параметр в Qt Creator (или, может быть, это поможет вам найти то, что отсутствует).

На целевом компьютере:

gdbserver :5000 yourprogram

На хост-машине запустите gdb, а затем загрузите файл символа:

(gdb) symbol-file yourprogram

В GDB на главном компьютере вам необходимо подключиться для подключения GDB к удаленному gdbserver:

(gdb) target remote target_ip_address:5000

С этого момента вы можете использовать GDB на хосте, контролирующем программу на цели.

Надеюсь, это поможет!