#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 и все работает нормально. Если кто-нибудь еще подтвердит ошибку, я закрою вопрос.