Отладка при помощи 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");

Опубликовано: