Удаленная отладка 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, чем та, которая установлена ​​на моем локальном ПК. Возможно, некоторые проблемы связаны с этим.

Обновление

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

Удаленное решение на основе Qt Creator нестабильно. GDB имеет тенденцию завершать работу из-за загадочного сообщения «сигнал принят».

14
задан Peter Mortensen 28 December 2016 в 12:25
поделиться

2 ответа

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

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

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

dir src
dir src/utils
...

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

3
ответ дан 1 December 2019 в 15:11
поделиться

Чтобы 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 на хосте, управляя программой на целевой машине.

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

7
ответ дан 1 December 2019 в 15:11
поделиться