Próbowałem debugować program z gdb w Raspbian, ale dostaję tylko:
Program received signal SIGILL, Illegal instruction.
0xb6fe8acc in ?? () from /lib/ld-linux-armhf.so.3
Nie pomaga ustawić SIGILL
uchwyt na nostop
( handle SIGILL nostop
):
Program received signal SIGILL, Illegal instruction.
Program terminated with signal SIGILL, Illegal instruction.
The program no longer exists.
Wszystko, co otrzymuję, to:
#0 0xb6fe8acc in ?? () from /lib/ld-linux-armhf.so.3
#1 0x00000000 in ?? ()
Jeśli uruchomię program poza gdb, otrzymam normalny wyjątek C ++ (który chciałbym debugować).
Wszystkie oprogramowanie zostało zaktualizowane do najnowszej wersji z repozytoriów raspbian. Następnie wypróbowałem jądro fundacji raspberry pi „3.18.9+”, a także jądro raspbain „3.18.0-trunk-rpi” (potrzebuję niestandardowych modułów jądra). Mogę bez problemu debugować ten sam program na głównym komputerze.
Aktualizacja: Debugowanie działa zgodnie z oczekiwaniami z jądrem „3.12-1-rpi”.
Co powoduje ten błąd?
handle SIGILL pass nostop
?pass
jest domyślnie ustawiony, nie powinno to robić żadnej różnicy i nic nie zmieniło. Taki sam wynik jak w przypadkuhandle SIGILL nostop
bt
)? Myślę, że musisz pomyśleć o zapewnieniu większego kontekstu, jeśli poważnie oczekujesz, że ktoś wyjaśni „Co powoduje ten błąd?” oparty tylko na niedozwolonej instrukcji w linkerze / module ładującym (ld-linux-armhf
).Odpowiedzi:
Wygląda dokładnie tak samo jak ten problem: https://github.com/raspberrypi/linux/issues/766
Naprawiono cztery dni temu.
źródło
sudo apt-get update; sudo apt-get upgrade; sudo rpi-update
naprawiono dla mnie problem, pozwalając mi używaćcontinue
ihandle SIGILL nostop