Как отлаживать с помощью QEMU в Debian 10

#c #gdb #debian #qemu #debian-buster

Вопрос:

Вот моя программа:

 #include <stdio.h>

int main(void) {
    printf("Hello worldn");
    return 0;
}
 

Вот как я его компилирую

 aarch64-linux-gnu-gcc -O0 -g3 main.c
 

Я начал a.out вот так:

 qemu-aarch64-static -L /usr/aarch64-linux-gnu -singlestep -g 1234 ./a.out
 

А потом я начал gdb

 $ gdb-multiarch -q ./a.out
Reading symbols from ./a.out...done.
(gdb) set sysroot /usr/aarch64-linux-gnu/
(gdb) target remote :1234
Remote debugging using :1234
Reading symbols from /usr/aarch64-linux-gnu/lib/ld-linux-aarch64.so.1...(no debugging symbols found)...done.
0x0000004000814040 in ?? ()
   from /usr/aarch64-linux-gnu/lib/ld-linux-aarch64.so.1
(gdb) break main
Breakpoint 1 at 0x76c: file main.c, line 4.
(gdb) c
Continuing.
[Inferior 1 (Remote target) exited normally]
 

Мой вопрос: почему gdb не остановились на main входе, а программа просто закончилась без перерыва? Что я делаю не так?

Я повторил эти шаги в Ubuntu 20.04, и все работает нормально. Честно говоря, я давно использую ubuntu и мог бы просто забыть, что делал раньше, но Debian свеж.

Информация о версиях:

  • ос: Debian GNU/Linux 10 (buster)
  • QEMU: qemu-aarch64 version 3.1.0 (Debian 1:3.1 dfsg-8 deb10u8)
  • GDB: GNU gdb (Debian 8.2.1-2 b3) 8.2.1
  • ССАГПЗ: aarch64-linux-gnu-gcc (Debian 8.3.0-2) 8.3.0

Комментарии:

1. Похоже, это ошибка в qemu-user-static пакете в debian 10. Я скачал последнюю версию с github.com/multiarch/qemu-user-static/releases/tag/v6.1.0-6 и все работает нормально. Если кто-нибудь еще подтвердит ошибку, я закрою вопрос.