Frage Was verursacht Signal "SIGILL"?


Ich portiere C ++ - Code mit NDK und GCC auf Android. Der Code läuft grundsätzlich. Zu einem Zeitpunkt, wenn in Eclipse debuggen, der Anruf

Dabbler::Android::Factory* pFactory = new Dabbler::Android::Factory;

verursacht diesen Fehler:

Thread [1] (Suspended: Signal 'SIGILL' received. Description: Illegal instruction.)
1 <symbol is not available> 0x812feb44

Was bedeutet das? Hat der Compiler aus irgendeinem Grund illegalen Code generiert? Ich habe einen Haltepunkt im Konstruktor (der nichts tut), und es wird nicht getroffen. Ich habe bereits einen kompletten Umbau durchgeführt.

Was könnte ich falsch machen, um dieses Problem zu verursachen?


75
2017-10-26 11:17


Ursprung


Antworten:


Es funktioniert jetzt. Für jeden, der mit Android / NDK / GCC / Eclipse zu kämpfen hat, habe ich Folgendes gelöst:

  1. Begrabe eine tote Katze um Mitternacht, wenn Vollmond ist
  2. Starten Sie den Android-Geräteemulator neu

Habe nicht überprüft, ob beide Schritte wirklich notwendig sind, und wenn nicht, welcher ist überflüssig.


634
2017-10-26 12:02



Dies bedeutet, dass die CPU versuchte, eine Anweisung auszuführen, die sie nicht verstanden hat. Dies könnte durch Korruption verursacht werden, denke ich, oder vielleicht wurde es für die falsche Architektur kompiliert (in diesem Fall hätte ich gedacht, dass das O / S die Ausführung der ausführbaren Datei verweigern würde). Nicht ganz sicher, was das Grundproblem ist.


19
2017-10-26 11:20



Es könnte ein nicht initialisierter Funktionszeiger sein, insbesondere wenn Sie Speicher beschädigt haben (dann könnte die falsche Vtabelle von C ++ - ungültigen Zeigern auf ungültige Objekte das geben).

Übrigens gdb Watchpoints und Tracepoints, und auch Valgrind möglicherweise nützlich (falls verfügbar), um solche Probleme zu debuggen. Oder einige Adress-Desinfektionsmittel.


18
2017-10-26 11:31