Saya mem-porting beberapa kode C ++ ke Android menggunakan NDK dan GCC. Kode pada dasarnya berjalan. Pada satu titik, saat melakukan debug di Eclipse, panggilan tersebut
Dabbler::Android::Factory* pFactory = new Dabbler::Android::Factory;
menyebabkan kesalahan ini:
Thread [1] (Suspended: Signal 'SIGILL' received. Description: Illegal instruction.)
1 <symbol is not available> 0x812feb44
Apa artinya? Apakah kompiler menghasilkan kode ilegal karena alasan tertentu? Saya memiliki breakpoint di konstruktor (yang tidak melakukan apa-apa), dan tidak terkena. Saya telah melakukan rekondisi penuh.
Apa yang bisa saya lakukan salah yang menyebabkan masalah ini?
sumber
Ini bisa berupa beberapa penunjuk fungsi yang tidak diinisialisasi, khususnya jika Anda memiliki memori yang rusak (maka vtable palsu dari C ++ penunjuk buruk ke objek yang tidak valid mungkin memberikannya).
BTW
gdb
watchpoints & tracepoints, dan juga valgrind mungkin berguna (jika tersedia) untuk men-debug masalah tersebut. Atau pembersih alamat .sumber
Pastikan semua fungsi dengan tipe pengembalian non-void memiliki
return
pernyataan.Sementara beberapa kompiler secara otomatis memberikan nilai kembalian default, yang lain akan mengirim SIGILL atau SIGTRAP saat runtime ketika mencoba meninggalkan fungsi tanpa nilai kembalian.
sumber