Отладка при помощи GDB
ВНИМАНИЕ Все манипуляции произвоятся на контроллере Raspberry Pi 3 с прошивкой собранной при помощи buildroot.
Перед началом работы лучше ознакомиться с документацией на gdbserver и Buildroot.
Для теста GDB, создадим простое приложение (назовем test.c):
#include <stdio.h>
int main() {
printf("hello\n");
return 1;
}
Для его сборки создадим простой Makefile в котором пропишем опцию кросс-компиляции:
ifndef CROSS_CC_PREFIX
CROSS_CC_PREFIX=$(CROSS_COMPILE)
endif
CC=$(CROSS_CC_PREFIX)gcc
all:
$(CC) $(CCFLAGS) test.c -g -o test.out
Если установлена переменная окружения CROSS_COMPILE, тогда сборка производится под указанную платформу. Собираем наш test.c при помощи команд:
export CROSS_COMPILE=<каталог установки кросс-компилятора>/host/usr/bin/arm-linux-gnueabihf-
make
Для того чтобы убедится что сборка прошла успешно используем команду file
.
file test.out
test.out: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, for GNU/Linux 2.6.32, BuildID[sha1]=ba50c69ab4b20f684fe3be6f75db4b68de1b16e4, not stripped
Для проведения отладки, gdbserver бинарный файл должен быть и на сервере и на клиенте. На контроллер скопируем при помощи команды:
rsync test.out root@<ip адрес Raspberry Pi 3>:/root
Запускаем сервер gdbserver:
gdbserver <ip адрес Raspberry Pi 3>:2345 test.out
Запускаем отладку на клиенте:
<каталог установки кросс-компилятора>/host/usr/bin/arm-linux-gnueabihf-gdb -x <каталог установки кросс-компилятора>arm-buildroot-linux-gnueabihf/sysroot/usr/share/buildroot/gdbinit test.out
После запуска gdb необходимо подключится к серверу:
(gdb) target remote <ip адрес Raspberry Pi 3>:2345
Пробуем простой breakpoint:
(gdb) break main
(gdb) continue
Вывод отладчика должен быть таким:
Breakpoint 1, main () at test.c:4
4 printf("hello\n");