Я нашел способ, используя gdbgui
, но мне потребовалось пересобрать GDB из исходного кода в соответствии с моей конкретной архитектурой удаленного назначения.Детали того, как я заставил это работать, здесь:
https://github.com/cs01/gdbgui/issues/237
Важные биты в случае разрыва вышеупомянутой ссылки: TLDR Решение:
Я пытался положиться напредварительно собранный gdb-multiarch из репозиториев Ubuntu apt, который не работал.Когда я решил скачать gdb и пересобрать из исходного кода при настройке целевой арки arm-linux-gnuabi.
Метод сборки:
скачал последний исходный код gdb
распаковать его,перейдите в папку и создайте ее следующим образом:
./configure --host=x86_64-pc-linux-gnu --build=x86_64-pc-linux-gnu --target=arm-linux-gnuabi && make -j8 && sudo make install
Важно отметить, что для моего конкретного удаленного сервера GDB он работает на ARM, поэтому мне пришлось сказать target=arm-linux-gnuabi
в конфигурации.GDB строит для моего ПК x86 arch, но при отладке он знает, что распознает цель как ARM!
Теперь arm-linux-gnuabi-gdb
по умолчанию установлен в /usr/local/bin
... но вы можете вместо этого предоставить prefix=<path>
туда, куда вы хотите установить его в сценарии ./configure
, указанном выше.
Используя это, я смог создать вторичную копию gdb с именем arm-linux-gnuabi-gdb
, которую я мог бы передать gdbgui
следующим образом:
gdbgui -g arm-linux-gnuabi-gdb
Оттуда я могу дать команды GDB для подключения к моему удаленному GDB-серверу.Я должен заранее установить контрольные точки.Мои gdb
команды похожи на эти, чтобы установить несколько точек останова:
set breakpoint pending on
break my_object.cpp:<line number for breakpoint>
b example_function_name
target remote <remote arm machine IP>:<gdbserver port>
c
Отлично работает!Это намного лучше, чем запуск gdb в командной строке на моей удаленной цели.