Skip to content

gdb удаленная отладка

Dmitry Ponyatov edited this page Aug 22, 2019 · 18 revisions

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 каталогу для загрузки символов из библиотек целевой системы
Clone this wiki locally