2012-02-04 118 views
5

第一個 - 就是默認情況下已經定義了NDEBUG,所以在#undef之前聲明不起作用。 第二個 - 他們工作,但我沒有收到DDMS日誌記錄。Android NDK assert.h問題

如果有一些android特定的assert.h?

或者我只是做錯了什麼?

+0

無論'NDEBUG'定義應取決於編譯器標記。如果你在發佈模式下編譯,應該在調試模式下定義,顯然它不應該。你可以檢查(如果你的IDE設置不回答這個問題),通過加上'#ifdef NDEBUG \ n#錯誤糟糕,NDEBUG定義了\ n #endif'(用實際換行符替換'\ n')文件並編譯它。 – 2012-02-04 12:51:09

回答

11

如果你想編譯代碼與斷言,那麼你可以做到這一點的方法有三種:

  • 使用NDK_DEBUG = 1個NDK建造命令行參數
  • 添加機器人:以可調試=「真」 <應用>在AndroidManifest.xml標籤
  • 添加APP_OPTIM:=調試您Application.mk文件 - 這也將禁用優化,將與調試符號編譯
6

通常程序會在assert()被調用後由於SIGSEGV信號而崩潰,默認情況下NDEBUG被定義,您可以在編譯過程中添加標誌(LOCAL_CFLAGS += -UNDEBUG)而關閉,但不適用於我的情況。

我發現了另一個解決方案是使用__android_log_assert,簡單地如下文限定,並與assert3替換assert()

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

-UNDEBUG實際上是爲我工作的。非常感謝 – 2016-08-01 11:15:12