3.18 çekirdeği (3.12 çalışır) kullanarak “Program alınan sinyal SIGILL” olmadan nasıl hata ayıklanır?


10

Raspbian gdb ile bir programda hata ayıklamaya çalıştım, ama tüm elde:

Program received signal SIGILL, Illegal instruction.
0xb6fe8acc in ?? () from /lib/ld-linux-armhf.so.3

SIGILLTanıtıcıyı nostop( handle SIGILL nostop) olarak ayarlamak yardımcı olmaz :

Program received signal SIGILL, Illegal instruction.

Program terminated with signal SIGILL, Illegal instruction.
The program no longer exists.

Aldığım tüm backtrace:

#0  0xb6fe8acc in ?? () from /lib/ld-linux-armhf.so.3
#1  0x00000000 in ?? ()

Programı gdb dışında başlatırsam, normal bir C ++ istisnası alıyorum (hata ayıklamak istiyorum).

Tüm yazılımlar raspbian depolarından en son sürüme güncellendi. Ayrıca ahududu pi vakıf çekirdeği "3.18.9+" ve ayrıca raspbain çekirdeği "3.18.0-gövde-rpi" (bazı özel çekirdek modüllerine ihtiyacım var) denedim. Aynı programı ana makinemde herhangi bir sorun olmadan hata ayıklayabilirim.

Güncelleme: Hata ayıklama "3.12-1-rpi" çekirdeğinde beklendiği gibi çalışıyor.

Bu hataya ne sebep oluyor?


Denedin handle SIGILL pass nostopmi
mpromonet

@mpromonet passVarsayılan olarak ayarlandığından, bir fark yaratmamalıdır ve herhangi bir fark yaratmamıştır . handle SIGILL nostop
İle

Ve anlamlı bir backtrace ( bt) yok mu? Bence birisinin "Bu hataya ne sebep oluyor?" yalnızca bağlayıcıdaki / yükleyicideki ( ld-linux-armhf) yasadışı bir talimatı temel alır .
goldilocks

Anlamlı bir geri iz alamadım (düzenlenen soruya bakınız). Küçük bir örnek oluşturmaya çalışacağım. Ayrıca, gdb olmadan yasadışı bir opcode alamadığım için kafam karıştı.
19'te birileri

1
yığın ezilmiş gibi görünüyor, valgrind yardımcı olabilir?
mpromonet

Yanıtlar:


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.