Я только что потратил целый день, пытаясь найти способ включить отладку GDB из Qt Creator или Eclipse.Я узнал, что существует два основных подхода к запуску целевого приложения:
ssh host gdb
) , я смог использовать оба подхода для удаленного запуска gdb и запустить приложение. Однако GDB никогда не отвечает ни на какие точки останова, установленные в IDE. Также я не могу приостановить приложение, чтобы проверить состояние программы. В Qt Creator я просто получаю неясную трассировку стека (на самом деле я, возможно, смотрел на следы ssh или gdb ...).
Кто-нибудь может помочь мне начать работу?
Я обнаружил, что в Qt Creator 2.0 есть функция под названием «Присоединение и отладка удаленного приложения». Он основан на gdbserver. Хорошо то, что он останавливается на точках останова IDE. Однако есть две проблемы:
Я, вероятно, должен упомянуть, что удаленный исполняемый файл скомпилирован с более старой версией GCC, чем та, которая установлена на моем локальном ПК. Возможно, некоторые проблемы связаны с этим.
Следует упомянуть, что я переключился на запуск cgdb на удаленной машине через SSH.
Удаленное решение на основе Qt Creator нестабильно. GDB имеет тенденцию завершать работу из-за загадочного сообщения «сигнал принят».
Из-за особенностей нашей системы сборки make-файлов ссылки на файлы, содержащиеся в отладочных символах, выглядят следующим образом:
../src/main.cpp
../../src/utils/logger.cpp
Это не проблема для GDB, но Qt Creator не смог сопоставить эти пути с фактические файлы. Я смог исправить это, добавив операторы 'dir' в файл инициализации GDB:
dir src
dir src/utils
...
Теперь это работает.
Чтобы 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 на хосте, управляя программой на целевой машине.
Надеюсь, это поможет!