Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

like image 274
Mani devs Avatar asked Jun 01 '17 21:06

Mani devs


1 Answers

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.

like image 164
r3mainer Avatar answered Oct 13 '22 12:10

r3mainer