2017-06-01 55 views
6

Używam funkcji LOG_DEBUG do drukowania informacji debugowania na ekranie. Użyłem funkcji #define _DEBUG do wyłączenia funkcji LOG_DEBUG poprzez zdefiniowanie flagi FLAG w czasie kompilacji (czas wydania). ale linux strings Polecenia aplikacji release build nadal wyświetlają ciągi debugujące, które istnieją w skompilowanej aplikacji. więc jakie są alternatywy, aby wyeliminować argumenty z LOG_DEBUG?usuwa ciągi debugowania w wersji wydania

#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 

kompilator używam: ARM/Thumb C/C++ Compiler, RVCT3.1 [Build 569]

optymalizacja: -O3

+0

Edytuj pytanie, dołączając nazwę i wersję kompilatora. Czy próbowałeś zmienić ustawienia optymalizacji? –

+0

Domyślam się, że * jednym * sposobem byłoby otoczenie ** każdego ** debugowania z '# ifdef', ale zakładam, że nie chcesz tego robić;) – Jeeter

+1

jest ogromna liczba wywołań funkcji, szukam dla czystszego sposobu –

Odpowiedz

3

Mógłbyś spróbować użyć 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; 
} 

Uwaga: Testowałem to w brzękiem, który nie robi” t wykazywać zachowanie, które opisałeś.

+0

może to tylko kwestia armcc –