2009-01-30 15 views

cevap

26

bulunabilir.

trace.cpp:

#ifdef _DEBUG 
bool _trace(TCHAR *format, ...) 
{ 
    TCHAR buffer[1000]; 

    va_list argptr; 
    va_start(argptr, format); 
    wvsprintf(buffer, format, argptr); 
    va_end(argptr); 

    OutputDebugString(buffer); 

    return true; 
} 
#endif 

trace.h:

#include <windows.h> 
#ifdef _DEBUG 
bool _trace(TCHAR *format, ...); 
#define TRACE _trace 
#else 
#define TRACE false && _trace 
#endif 

sonra sadece "trace.h" #include ve tüm hazırsınız.

Yasal Uyarı: Bu kodu yalnızca kişisel bir projeden kopyalayıp yapıştırdım ve bazı projeye özel şeyler aldım, ancak çalışmaması için bir neden yok. ;-)

+0

wvsprintf, kayan nokta sayılarını işlemez (% f). Bunun yerine, vsprintf kullanılabilir. – JcMaco

+2

Linux C++ için kodunuzu '#include ', '#include ' ile değiştirdim,' wvsprinf' yerine 'vsnprinf' değiştirildi. Daha sonra '' OutputDebugString' '' std :: clog << buffer << std :: flush; 'ile değiştirildi. – enthusiasticgeek

+3

Sürümde, Visual Studio, her TRACE gerçekleşmesi için bir uyarı C4013 (uyarı düzeyi 3) ve ayrıca C4555 (tüm uyarı düzeyi) uyarıları oluşturur. Uyarıları önlemek için 'yanlış' ve '_trace' kısmını '__noop' olarak değiştirdim. Bu ayrıca MFC'nin yaptığı yoldur. –

3

DebugOutputString işlevini deneyebilirsiniz. TRACE yalnızca hata ayıklama yapılarında etkinleştirilir.

7

ATL kullanıyorsanız ATLTRACE'ı deneyebilirsiniz.

İZ (en az 2008 vs cinsinden) olarak AFX.H tanımlanır:

// extern ATL::CTrace TRACE; 
#define TRACE ATLTRACE 

Ve ATLTRACE Kendi oluşturun atltrace.h

+0

bu bu yaklaşımı kullanmak istedi ;-) bekliyoruz ATL olmayan bir proje. C++/CLI ile Pencere Formları ile çalışıyorum ve 'atltrace.h' ekleyerek derleyici hatalarına neden oldum, bu yüzden sadece 'OuputDebugString()' işlevini kullanarak yaklaştım. –

1

Anlayışımda wvsprintf'in biçimlendirmede sorun var. İşte Ferruccio ve enthusiasticgeek gelen fikirlere dayanan C benim İZ makro ++ paylaşmak

:-) benim hata düzeltildi gelmiş bu yanıtlara _vsnprintf (veya thcar sürüm _vsntprintf) yerine

1

Teşekkür kullanın.

#ifdef ENABLE_TRACE 
# ifdef _MSC_VER 
# include <windows.h> 
# include <sstream> 
# define TRACE(x)       \ 
    do { std::stringstream s; s << (x);  \ 
      OutputDebugString(s.str().c_str()); \ 
     } while(0) 
# else 
# include <iostream> 
# define TRACE(x) std::clog << (x) 
# endif  // or std::cerr << (x) << std::flush 
#else 
# define TRACE(x) 
#endif 

örnek:

#define ENABLE_TRACE //can depend on _DEBUG or NDEBUG macros 
#include "my_above_trace_header.h" 

int main (void) 
{ 
    int  v1 = 123; 
    double v2 = 456.789; 
    TRACE ("main() v1="<< v1 <<" v2="<< v2 <<'\n'); 
} 

Herhangi iyileştirmeler/öneriler/katkıları Ancak bu birlikte gelen bazı ek ATL bagaj yoktur

İlgili konular