2012-02-04 119 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