Pertanyaan Apa yang menyebabkan sinyal 'SIGILL'?


Saya sedang memindahkan beberapa kode C ++ ke Android menggunakan NDK dan GCC. Kode pada dasarnya berjalan. Pada satu titik, ketika melakukan debug di Eclipse, panggilan

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 compiler menghasilkan kode ilegal untuk beberapa alasan? Saya memiliki breakpoint di konstruktor (yang tidak melakukan apa-apa), dan itu tidak terpukul. Saya sudah melakukan pembangunan kembali secara menyeluruh.

Apa yang bisa saya lakukan salah untuk menyebabkan masalah ini?


75
2017-10-26 11:17


asal


Jawaban:


Ia bekerja sekarang. Untuk orang lain yang berjuang dengan Android / NDK / GCC / Eclipse, inilah cara saya memecahkannya:

  1. Mengubur kucing mati di tengah malam saat bulan purnama
  2. Nyalakan kembali emulator perangkat Android

Belum diverifikasi apakah kedua langkah itu benar-benar diperlukan, dan jika tidak, mana yang berlebihan.


634
2017-10-26 12:02



Ini berarti CPU berusaha menjalankan instruksi yang tidak dipahami. Ini bisa disebabkan oleh korupsi yang saya duga, atau mungkin sudah dikompilasi untuk arsitektur yang salah (dalam hal ini saya akan berpikir O / S akan menolak menjalankan eksekusi). Tidak sepenuhnya yakin apa masalah pokoknya.


19
2017-10-26 11:20



Ini bisa menjadi beberapa fungsi pointer yang tidak diinisialisasi, khususnya jika Anda memiliki memori rusak (maka vtable palsu dari C + + pointer buruk ke objek tidak valid mungkin memberikan itu).

BTW gdb watchpoints & tracepoints, dan juga valgrind mungkin berguna (jika tersedia) untuk men-debug masalah tersebut. Atau beberapa pembersih alamat.


18
2017-10-26 11:31