Android NDK assert.h problems

10,664

Solution 1

If you want to compile your code with asserts then you can do it in three ways:

  • use NDK_DEBUG=1 argument in ndk-build commandline
  • add android:debuggable="true" to < application > tag in AndroidManifest.xml
  • add APP_OPTIM := debug to your Application.mk file - this will also disable optimizations and will compile with debug symbols

Solution 2

Usually program will crash due to SIGSEGV signal after assert() is called, by default NDEBUG is define, you may turn off by add the flag (LOCAL_CFLAGS += -UNDEBUG) during compilation but not work for my case.

I found another solution is using __android_log_assert, simply define as below and replace assert() with assert3:

#define assert3(e...) __android_log_assert(e, "TAG", #e)
Share:
10,664
Aristarhys
Author by

Aristarhys

Sad man behind a screen. Why you siting in cubicle alone? You are not.

Updated on June 04, 2022

Comments

  • Aristarhys
    Aristarhys almost 2 years

    First one - is what NDEBUG somehow already defined by default, so asserts don't work until you #undef it. Second one - they do they work, but i receive no logging in DDMS.

    If there is some android specific one assert.h?

    Or i just do something wrong?

  • Sandeep
    Sandeep almost 8 years
    -UNDEBUG actually worked for me.. Thank you very much
  • Moshe Rabaev
    Moshe Rabaev almost 5 years
    But why though? Why can't I use assert statements when building in release mode?