Ich portiere C ++ - Code mit NDK und GCC auf Android. Der Code läuft grundsätzlich. Einmal, beim Debuggen in Eclipse, der Aufruf
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 er wird nicht getroffen. Ich habe bereits einen vollständigen Umbau durchgeführt.
Was könnte ich falsch machen, um dieses Problem zu verursachen?
quelle
Es könnte sich um einen nicht initialisierten Funktionszeiger handeln, insbesondere wenn Sie den Speicher beschädigt haben (dann könnte die falsche Tabelle mit fehlerhaften C ++ - Zeigern auf ungültige Objekte dies anzeigen).
BTW
gdb
Beobachtungspunkte & Trace, und auch valgrind könnte nützlich sein (falls vorhanden) solche Probleme zu debuggen. Oder ein Adressdesinfektionsmittel .quelle
Stellen Sie sicher, dass alle Funktionen mit dem Rückgabetyp nicht ungültig eine
return
Anweisung haben.Während einige Compiler automatisch einen Standardrückgabewert bereitstellen, senden andere zur Laufzeit ein SIGILL oder SIGTRAP, wenn sie versuchen, eine Funktion ohne Rückgabewert zu belassen.
quelle