Удаленная отладка 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 стремится выйти из-за таинственных сообщений, полученных от сигнала.
Ответы
Ответ 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 на хосте, контролирующем программу на цели.
Надеюсь, это поможет!