-
Notifications
You must be signed in to change notification settings - Fork 5
gdb удаленная отладка
Для отладки программ на встраиваемых системах можно использовать несколько вариантов:
Удаленная отладка особенно полезна для систем на базе Linux, когда рабочая станция и устройство для запуска вашей программы могут находиться на разных континентах.
На целевой системе должна быть запущена специальная программа, обрабатывающая команды отладчика -- gdbserver
.
$ make remote
Ctrl-Z
$ bg
$ make debug
IP ?= 111.111.111.111
PORT ?= 12345
IP_FORWARDING = $(IP)
# GDB_FORWARDING = -L $(PORT):$(IP):$(PORT)
# IP_FORWARDING = localhost
debug: hello.mips
$(GDB) -ex "target extended-remote $(IP_FORWARDING):$(PORT)" \
-ex "set sysroot $(STAGING)" \
-ex "remote put $< /tmp/$<" \
-ex "set remote exec-file /tmp/$<" \
-ex "run" $<
remote:
ssh root@$(IP) $(GDB_FORWARDING) 'gdbserver --multi $(IP_FORWARDING):$(PORT)'
Внимание! приведен пример запуска отладки, который можно использовать только в локальной сети!
Даже в этом случае эта сеть не должна быть дальше вашего стола -- в сети предприятия постоянно появляются вирусы или сканеры сети, запущенные специально, чтобы вытаскивать пароли, сканировать открытые порты, и проникать в незащищенные устройства при первой возможности. Особенно весело этот процесс происходит, если есть возможность подключения с мобильных устройств по WiFi, и запуска произвольных программ с USB-флешек.
Для удаленной отладки на устройствах, к которым нет физического доступа, приходится открывать сетевые интерфейсы в глобальную сеть. Поэтому удаленная отладка может быть использована только по защищенному каналу -- в VPN или через SSH-подключение с пробросом ip-портов через туннель (раскомментируйте строки в примере выше).
gdb команды для удаленной отладки
(gdb) | monitor exit |
завершить работу gdbserver на удаленной стороне |
remote put host.file /tmp/target.file |
загрузка файла на удаленный хост | |
set remote exec-file /tmp/hello |
указать куда записать программу перед запуском | |
(не работает для микроконтроллеров) | ||
set sysroot [Directory] |
путь к STAGING каталогу для загрузки символов из библиотек целевой системы |