TRACEとATLTRACE2 【やってみた】


TRACE

Visual C++でプログラムを書くときに変数を追いたい時に、printf代わりにデバッグ時に使えるものとしてTRACEがあるのだが、MSDNでこれを調べたところ

TRACE と ATLTRACE2 の動作は同じです。

とのことだった。(引用元: MSDN)ということは、MFCでもこのATLTRACE2が使えるかどうか使ってみたところ、普通にこのように使うことができた。

スポンサーリンク

atltrace2.png
ATLTRACE2( "CTestDlg::OnPaint\n" );
ATLTRACE2( "CTestDlg::OnPaint%p\n", this );

TRACE0

MFCのTRACEの方法にTRACE0〜3まであるのだが、MSDNには、

TRACE マクロは互換性のために残されており、ATLTRACE2 を使用します。

とのことだった。(引用元: MSDN)

ということで、TRACEの時を含めMFCでもATLTRACE2を使えばいいということがわかる。自分の場合WTLでプログラムを書く場合もあるので、このATLTRACE2だけ覚えておくのが吉かな。

ATLTRACE2

さて、このATLTRACE2だが、MSDNには二つの構文が載っている。

ATLTRACE2( exp );
ATLTRACE2(
   DWORD category,
   UINT level,
   LPCSTR lpszFormat,
   ...
);

(引用元: MSDN)上のATLTRACE2はなんとなく普通のTRACEだというのがわかるのだが、その下がイマイチ分からない。で、これを解決するヒントがVisual Studio付属のATL/MFCトレースツールにあった。

atl_mfc_trace_tool.jpg

どうやら、categoryというのはここでいう「分類」でありトレースメッセージの量がlevelに対応しているようだ。つまり、上のATLTRACE2はcategoryがatlTraceGeneralでありlevelは0を省略したもののようだ。で、このATL/MFCトレースツールによってそれらTRACEのうちどれをVisual Studioの出力に出すかを決めるということである。

それにしても、Visual Studio本体にこれを設定するツールがついていないのは何故だろうか、、、などと思ってしまうが歴史的な何かでもあるのかもしれない。(メニューから呼び出せるのでいいのだが、、、)

スポンサーリンク
カテゴリー: やってみた   パーマリンク

コメントは受け付けていません。