TRACE()マクロを使用して、 Visual Studio 2005 非- [〜#〜] mfc [〜#〜] C++のデバッグウィンドウに出力を取得したいプロジェクトですが、どの追加のヘッダーまたはライブラリが必要ですか?
デバッグ出力ウィンドウにメッセージを表示する方法はありますか?どうすればよいですか?
あなた自身のものをつくる。
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
次に、#include "trace.h"を実行するだけで、準備が整います。
免責事項:私はこのコードを個人的なプロジェクトからコピーして貼り付け、プロジェクト固有のものをいくつか取り出しましたが、機能しない理由はありません。 ;-)
ATLを使用している場合は、ATLTRACEを試すことができます。
TRACEは、afx.hで次のように定義されています(少なくとも2008年と比較して)。
// extern ATL::CTrace TRACE;
#define TRACE ATLTRACE
そしてATLTRACEはatltrace.hで見つけることができます
DebugOutputString関数を試すことができます。 TRACEは、デバッグビルドでのみ有効になります。
これらの回答のおかげで、バグを修正しました:-)
ここでは、Ferruccioとenthusiasticgeekのアイデアに基づいて、C++でTRACEマクロを共有します。
#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
例:
#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');
}
どんな改善/提案/貢献も歓迎します;-)
私の理解では、wvsprintfにはフォーマットの問題があります。代わりに_vsnprintf(またはthcarバージョン_vsntprintf)を使用してください