cdebuggingreleasearmccrvds

remove debug strings in release build


I use a LOG_DEBUG function to print debug information to the screen. I used a #define _DEBUG to disable LOG_DEBUG function by defining _DEBUG FLAG in compile time (release time). but linux strings commands of release build app still shows debug strings which exists in the compiled app. so what is the alternatives to eliminate arguments of LOG_DEBUG?

#ifdef _DEBUG
#define LOG_DEBUG(fmt, ...) printf("[D][%s:%d %s]", __FILE__, __LINE__, __FUNCTION__, ##__VA_ARGS__)
#else
#define LOG_DEBUG(fmt, ...)
#endif


LOG_DEBUG("this is a debug string");     // "this is a debug string" exists in app release build yet

the compiler I use: ARM/Thumb C/C++ Compiler, RVCT3.1 [Build 569]

optimization: -O3


Solution

  • You could try using stringification:

    #include <stdio.h>
    
    #define _DEBUG
    
    #ifdef _DEBUG
    #define LOG_DEBUG(str) do { printf("[D][%s:%d %s] ", \
                                   __FILE__, \
                                   __LINE__, \
                                   __FUNCTION__); \
                                puts(#str); } while(0)
    #else
    #define LOG_DEBUG(str)
    #endif
    
    int main() {
      LOG_DEBUG(this is a debug string);
      return 0;
    }
    

    Note: I tested this in clang, which doesn't exhibit the behaviour you described.