2017-06-01 2 views
6

J'utilise une fonction LOG_DEBUG pour imprimer les informations de débogage à l'écran. J'ai utilisé un #define _DEBUG pour désactiver la fonction LOG_DEBUG en définissant _DEBUG FLAG au moment de la compilation (heure de publication). mais les commandes linux strings de l'application build build montrent toujours les chaînes de débogage qui existent dans l'application compilée. Alors, quelles sont les alternatives pour éliminer les arguments de LOG_DEBUG?Supprimer les chaînes de débogage dans la version de construction

#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 

le compilateur J'utilise: ARM/Thumb C/C++ Compiler, RVCT3.1 [Build 569]

optimisation

: -O3

+0

Veuillez modifier votre question pour inclure le nom et la version du compilateur. Avez-vous essayé de modifier les paramètres d'optimisation? –

+0

Je suppose que * une * façon serait d'entourer ** chaque ** débogage avec un # ifdef, mais je suppose que vous ne voulez pas faire cela;) – Jeeter

+1

il y a un grand nombre d'appels de fonction, je cherche pour une voie plus propre –

Répondre

3

Vous pouvez essayer d'utiliser 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: J'ai testé cela dans clang, qui n » t exposer le comportement que vous avez décrit.

+0

peut-être que c'est juste un problème armcc –