Przenoszę kod C ++ do Androida przy użyciu NDK i GCC. Kod w zasadzie działa. W pewnym momencie podczas debugowania w Eclipse wywołanie
Dabbler::Android::Factory* pFactory = new Dabbler::Android::Factory;
powoduje ten błąd:
Thread [1] (Suspended: Signal 'SIGILL' received. Description: Illegal instruction.)
1 <symbol is not available> 0x812feb44
Co to znaczy? Czy kompilator z jakiegoś powodu wygenerował niedozwolony kod? Mam punkt przerwania w konstruktorze (który nic nie robi) i nie jest trafiony. Zrobiłem już pełną przebudowę.
Co mogłem zrobić źle, aby spowodować ten problem?
android
c++
android-ndk
porting
Amator
źródło
źródło
Może to być jakiś niezainicjalizowany wskaźnik funkcji, w szczególności jeśli masz uszkodzoną pamięć (wtedy fałszywa tabela vtable w C ++ błędnych wskaźników do nieprawidłowych obiektów może to dać).
BTW
gdb
watchpoints & tracepoints, a także valgrind mogą być przydatne (jeśli są dostępne) do debugowania takich problemów. Lub środek odkażający adres .źródło
Upewnij się, że wszystkie funkcje o innym niż void zwracanym typie mają
return
instrukcję.Podczas gdy niektóre kompilatory automatycznie dostarczają domyślną wartość zwracaną, inne wysyłają SIGILL lub SIGTRAP w czasie wykonywania, próbując pozostawić funkcję bez wartości zwracanej.
źródło