使用OutputDebugString将调试信息输出


    在编写控制台程序的时候我们经常会使用printf输出调试信息,使我们了解程序的状态,方便调试,但是当编写非控制台程序的时候这种方法就行不通了,那我们应该怎么办?上网查了一些方法,大致就如下几种

  • 使用Log机制
  • 用TRACE宏
  • 其他

    首先,使用Log机制的话要先写一个Log系统,麻烦。而关于TRACE宏,查了资料后才发现原来是MFC里的东西,那对于非MFC程序,就用不了了。    后来发现了OutputDebugString这玩意儿,发现不错。他是属于windows API的,所以只要是包含了window.h这个头文件后就可以使用了,很方便。他可以把调试信息输出到编译器的输出窗口,如下:还可以用DbgView这样的工具查看,这样就可以脱离编译器了。    下面说说如何使用OutputDebugString,他的函数原型是:

void WINAPI OutputDebugString( __in_opt  LPCTSTR lpOutputString);

就一个参数,是LPCTSTR 类型的。

    这里我对这个API做了一些包装,当然,参考了一些文章:

  
  
  1. //木杉的博客  http://blog.csdn.net/mazhibinit  
  2. //2012年6月10日         ------转载请注明出处  
  3.  
  4. #ifndef _DEBUGPRINTF_H_ 
  5. #define _DEBUGPRINTF_H_ 
  6.  
  7. #include<Windows.h> 
  8. #include <tchar.h> 
  9.  
  10. //用于输出信息到编译器输出窗口的宏定义 
  11. //使用win API,DEBUG版本会执行,RELEASE版本则不会 
  12. //还可以使用DebugView,WinDbg等工具查看输出 
  13.  
  14. #ifdef _DEBUG 
  15.  
  16. #define DP0(fmt) {TCHAR sOut[256];_stprintf_s(sOut,_T(fmt));OutputDebugString(sOut);} 
  17. #define DP1(fmt,var) {TCHAR sOut[256];_stprintf_s(sOut,_T(fmt),var);OutputDebugString(sOut);} 
  18. #define DP2(fmt,var1,var2) {TCHAR sOut[256];_stprintf_s(sOut,_T(fmt),var1,var2);OutputDebugString(sOut);} 
  19. #define DP3(fmt,var1,var2,var3) {TCHAR sOut[256];_stprintf_s(sOut,_T(fmt),var1,var2,var3);OutputDebugString(sOut);} 
  20.  
  21. #endif 
  22.  
  23. #ifndef _DEBUG 
  24.  
  25. #define DP0(fmt) ; 
  26. #define DP1(fmt, var) ; 
  27. #define DP2(fmt,var1,var2) ; 
  28. #define DP3(fmt,var1,var2,var3) ; 
  29.  
  30. #endif 
  31.  
  32. #endif 

其中的DP就是表示BebugPrint。而且这些调试输出只会在BEBUG版本中有效,在Release版本中就不会有效。

这样使用:

  
  
  1. //木杉的博客  http://blog.csdn.net/mazhibinit  
  2. //2012年6月10日         ------转载请注明出处  
  3.  
  4. #include<stdio.h> 
  5. #include"debugPrint.h" 
  6. void main() 
  7.     for(int i=0;i<10;i++) 
  8.     { 
  9.         printf("hello!\n"); 
  10.         DP0("这是调试信息!\n"); 
  11.         DP1("这是调试信息%d\n",i); 
  12.         DP2("这是调试信息%d--%d\n",i,i+1); 
  13.         DP3("这是调试信息%d--%d--%d\n",i,i+1,i+2); 
  14.     } 
  15.     getc(stdin); 

    不过,输出这些信息对程序还是有拖慢作用的,像我在写游戏是使用了这个输出调试信息就使帧率下降了不少,不过对于非游戏程序应该还是没有什么影响的。

 

 

 

本文出自 “木杉的博客” 博客,请务必保留此出处http://mazhibin.blog.51cto.com/4842922/894427

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值