在开发调试过程中,我们往往要想知道一些变量的当前值,简单的变量可以用TRACE语句在调试窗口中打印出来:
TRACE(" this height :%d",height);
但是如果遇到比较复杂的值,如CRect, CRgn 等,如果要把它的值都打印出来,那是相当的麻烦:
TRACE(" this left :%d right % top % bottom %d \n",rect.left,rect.right,rect.top,rect.bottom);
如果程序很多地方都要这么做,岂不郁闷死,
还好,vc的开发者已经想到了这个问题,特地提供了一个宏:afxDump来简化这个工作,相对前面那个例子,现在可以这样写:
afxDump << rect << "\n";
这样你就美哉了吧!但是使用不久你就发现还是有不方便的地方:
1, 在release 下 新加的代码编译不了。
2, 每一次都要在后面补上 << "\n" ;这样的语句,不然它打印字串不会自动换行。
现在vs不会再给我们提供进一步的帮助,只能自己想办法;经过不停的摸索,终于找到一个办法,如下:
CDumpContext debugPrintObj;
#ifdef _DEBUG
#define debugPrint(a) \
debugPrintObj << a << "\n";
#else
#define debugPrint(a)
#endif
自己定义一个CDumpContext对象 debugPrintObj;
再定义一个宏debugPrint(a)如上,相对上面的例子可以这样使用:
debugPrint(rect);
这样就完满的解决了这个问题!