Na moim komputerze mam binaria aarch64, które jest statycznie skompilowane. Uruchomiłem go za pomocą qemu-aarch64-static z flagą -g 6566
. W innym terminalu uruchamiam gdb-multiarch
i łączę się jako target remote localhost:6566
.Obsługa sygnałów za pomocą qemu-użytkownika
Oczekuję, że plik binarny podniesie sygnał, dla którego mam program obsługi zdefiniowany w pliku binarnym. Ustawiłem punkt przerwania w programie obsługi od wewnątrz gdb-multiarch
po podłączeniu do pilota. Jednakże, gdy pojawia się sygnał, punkt przerwania nie jest trafiony w gb-multiarch. Zamiast tego, na terminalu, który uruchamia plik binarny, otrzymuję komunikat wzdłuż linii: -
[1] + 8388 suspended (signal) qemu-aarch64-static -g 6566 ./testbinary
Dlaczego tak się dzieje? Jak ustawić punkt przerwania w module obsługi i debugować go? Próbowałem SIGCHLD i SIGFPE.
Co to jest sygnał, który chcesz przechwycić? 'SIGCHLD' i' SIGFPE' są tworzone w bardzo różnych warunkach, nie widzę, jak je wypróbowałeś, ponieważ nie ma między nimi żadnej relacji. Pokaż kod obsługi i sposób ich konfiguracji. –
Próbowałem ich obu dla oddzielnych plików binarnych. W przypadku Binarnego SIGCHLD rozwidla się, rodzic wykonuje oczekiwanie. W przypadku SIGFPE wykonuję zamierzony podział przez 0. Operatory są dodawane jako sygnał (SIGCHLD, handler) lub sygnał (SIGFPE, handler). –