2017-06-01 25 views
6

Hata ayıklama bilgilerini ekrana yazdırmak için LOG_DEBUG işlevini kullanıyorum. Derleme zamanında _DEBUG FLAG'i tanımlayarakLOG_DEBUG işlevini devre dışı bırakmak için kullandım (serbest bırakma süresi). ancak sürüm oluşturma uygulamasının linux strings komutları, derlenmiş uygulamada bulunan hata ayıklama dizelerini hala gösterir. Yani LOG_DEBUG argümanlarını ortadan kaldırmak için alternatifler nelerdir?Sürüm oluşturmada hata ayıklama dizelerini kaldırın

#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 

derleyici kullandığım: ARM/Thumb C/C++ Compiler, RVCT3.1 [Build 569]

optimizasyonu: -O3

+0

Lütfen derleyicinin adını ve sürümünü eklemek için sorunuzu düzenleyin. Optimizasyon ayarlarını değiştirmeyi denediniz mi? –

+0

Sanırım * bir * yol, her ** bir '# ifdef' ile hata ayıklamak olurdu, ama bunu yapmak istemediğinizi varsayalım;) – Jeeter

+1

çok sayıda işlev çağrısı var, arıyorum Daha temiz bir yol için –

cevap

3

Sen stringification kullanarak deneyebilirsiniz:

#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; 
} 

Not: Ben kokan hangi clang bu test Tanımladığınız davranışı sergilemeyin.

+0

belki bu bir armcc meselesi –