TRACE
Visual C++でプログラムを書くときに変数を追いたい時に、printf代わりにデバッグ時に使えるものとしてTRACEがあるのだが、MSDNでこれを調べたところ
TRACE と ATLTRACE2 の動作は同じです。
とのことだった。(引用元: MSDN)ということは、MFCでもこのATLTRACE2が使えるかどうか使ってみたところ、普通にこのように使うことができた。
1 2 |
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には二つの構文が載っている。
1 2 3 4 5 6 7 |
ATLTRACE2( exp ); ATLTRACE2( DWORD category, UINT level, LPCSTR lpszFormat, ... ); |
(引用元: MSDN)上のATLTRACE2はなんとなく普通のTRACEだというのがわかるのだが、その下がイマイチ分からない。で、これを解決するヒントがVisual Studio付属のATL/MFCトレースツールにあった。
どうやら、categoryというのはここでいう「分類」でありトレースメッセージの量がlevelに対応しているようだ。つまり、上のATLTRACE2はcategoryがatlTraceGeneralでありlevelは0を省略したもののようだ。で、このATL/MFCトレースツールによってそれらTRACEのうちどれをVisual Studioの出力に出すかを決めるということである。
それにしても、Visual Studio本体にこれを設定するツールがついていないのは何故だろうか、、、などと思ってしまうが歴史的な何かでもあるのかもしれない。(メニューから呼び出せるのでいいのだが、、、)