2012-02-04 21 views
5

Primo: è ciò che NDEBUG ha in qualche modo già definito per impostazione predefinita, quindi afferma che non funziona finché non lo si #undef. Secondo: funzionano, ma non ricevo l'accesso al DDMS.Problemi NDK assert.h Android

Se c'è qualche specifico Android su assert.h?

Oppure faccio qualcosa di sbagliato?

+0

Sia 'NDEBUG' è definito dovrebbe dipendere dalle opzioni del compilatore. Se si compila in modalità di rilascio, dovrebbe essere definito, in modalità di debug, ovviamente non dovrebbe. Puoi controllare (se le tue impostazioni IDE non rispondono) inserendo qualcosa come "#ifdef NDEBUG \ n # errore Oops, NDEBUG è definito \ n # endif' (sostituisci '\ n' con le nuove righe) in una fonte file e compilarlo. –

risposta

11

Se vuoi compilare il codice con asserisce allora si può fare in tre modi:

  • uso NDK_DEBUG = 1 argomento a NDK-build di comando
  • aggiungere Android: debuggable = "true" per < applicazione> tag in AndroidManifest.xml
  • aggiungere APP_OPTIM: = di debug al file Application.mk - questo sarà anche disattivare le ottimizzazioni e verrà compilato con i simboli di debug
6

Generalmente il programma si blocca a causa del segnale SIGSEGV dopo che assert() viene chiamato, per impostazione predefinita NDEBUG è definito, è possibile disattivare aggiungendo il flag (LOCAL_CFLAGS += -UNDEBUG) durante la compilazione ma non funziona per il mio caso.

ho trovato un'altra soluzione sta usando __android_log_assert, semplicemente definire come qui sotto e sostituirlo con assert()assert3:

#define assert3(e...) __android_log_assert(e, "TAG", #e) 
+0

-UNDEBUG ha funzionato davvero per me .. Grazie mille –