TRACE在MFC里使用

TRACE   宏有点象我们以前在C语言中用的Printf函数,使程序在运行过程中输出一些调试信息,使我们能了解程序的一些状态。在Output中可以查看到结果。

但有一点不同的是:TRACE   宏只有在调试状态下才有所输出,而以前用的Printf   函数在任何情况下都有输出。和Printf   函数一样,TRACE函数可以接受多个参数如:  
   
  int   x   =   1;  
  int   y   =   16;  
  float   z   =   32.0;  
  TRACE(   "This   is   a   TRACE   statement/n"   );  
  TRACE(   "The   value   of   x   is   %d/n",   x   );  
  TRACE(   "x   =   %d   and   y   =   %d/n",   x,   y   );  
  TRACE(   "x   =   %d   and   y   =   %x   and   z   =   %f/n",   x,   y,   z   );  
  要注意的是TRACE宏只对Debug   版本的工程产生作用,在Release   版本的工程中,TRACE宏将被忽略。

注意:不要采用TRACE宏一次性输出大批量数据或不间断输出数据,因为这样有可能会时程序运行变得非常缓慢,如:    
   
  void   test_trace_e(void)  
  {  
  char   *pszDeb=new   char[1024*1024];  
   
  TRACE("%s/n",pszDeb);  
  //或者  
  for(int   i=0;i<sizeof(pszDeb);i++)  
  {  
  TRACE("%c/n",pszDeb[i]);  
  }  
  }  
   
  有一点需要注意的是,TRACE宏在只在调试(DEBUG)版本中起作用,而在发行(RELEASE)版本无效,所以不要在TRACE宏中进行对程序状态进行改变的计算或是调用对状态有改变的函数,例如:    
   
  void   yourClass::fun1()  
  {  
  TRACE("%d",++m_iTick);   //m_iTick状态改变  
  TRACE("return   value   =   %d",DoSomething());  
  }  
  void   yourClass:DoSomething()  
  {  
  if(m_szOut   ==   "No")  
  {  
  return   FALSE;  
  }  
  else  
  {  
  m_szOut="Yes";   //状态改变  
  reutrn   TRUE;  
  }  
  }   
 

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
(一)功能: 输出调试变量(类似于TRACE) (二)特点: 1.可以自动适应参数的类型(最主要依赖于ostringstream) 2.可以自动适应输入参数的个数。(关闭了编译提醒 #pragma warning(disable: 4003) ) 3.会在输出的变量值前面自动添加变量的名称,方便查看 4.程序创建Edit窗口用于输出转换后的字符串。 5.程序退出时会将输出字符串保存到工程目录下的DebugData.txt。方便查看 6.多种编译模式,比如可让DEBUG和Release版本都能输出调试变量或者两者都不输出 7.支持UNICODE,WIN32,Dll,MFC (三)使用说明: 1.把trace.h复制到工程目录下(可以不添加到工程)。 2.在文件"stdafx.h"(文件的下方)添加 #include "trace.h"。之后就可以使用trace()宏了。 3.所有输出的字符串会保存在工程目录下的"DebugData.txt"文件,以方便查看 4.我把所有代码都放在一个头文件,虽然不合符规范,但这样使用起来很方便。 5.trace(x,y,z,w)宏原本有4个参数,当参数不如时,编译器会给出警告,所以我使用 #pragma warning(disable: 4003) 把这个编译警告给关掉了。 (四)可以使用的宏: trace(X,Y,Z,W) //输出常用类型变量,如int、double、short、POINT、RECT、string //且自动适应变量的个数(变量数为1-4个) tracef() //格式化字符串,类似sprintf traceLastError()//输出系统错误代码,调用了GetLastError() traceRel(X,Y) //当X=true,输出"Y: successful" ; x=false,输出"Y: failed" traceClear() //清空窗口 (五)关于trace宏使能设置: 1.默认情况下 NO_TRACE_WINDOW 和 TRACE_WINDOW都没定义,则 DEBUG版本会输出调试字符串,而Release版本不会 2.如果开头定义了#define NO_TRACE_WINDOW DEBUG版本和Release版本都不会输出输出调试字符串 3.如果开头定义了#define TRACE_WINDOW DEBUG版本和Release版本都会输出输出调试字符串 4.每次修改上面2个宏后需要全部重新编译才会生效

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值