使用OutputDebugString輸出調試信息

概要:
在編寫控制檯程序的時候我們經常會使用printf輸出調試信息,使我們瞭解程序的狀態,方便調試,但是當編寫非控制檯程序的時候這種方法就行不通了。可以使用以下方法:
(1)使用Log機制
(2)用TRACE宏
(3)其他

首先,使用Log機制的話要先寫一個Log系統,麻煩。而關於TRACE宏,查了資料後才發現原來是MFC裏的東西,那對於非MFC程序,就用不了了。後來發現了OutputDebugString這玩意兒,發現不錯。它是屬於windows API的,所以只要是包含了window.h這個頭文件後就可以使用了,很方便。他可以把調試信息輸出到編譯器的輸出窗口,如下:還可以用DbgView這樣的工具查看,這樣就可以脫離編譯器了。下面說說如何使用OutputDebugString,函數原型是:
void WINAPI OutputDebugString( __in_opt LPCTSTR lpOutputString)

#ifndef _DEBUGPRINTF_H_    
#define _DEBUGPRINTF_H_    
      
#include<Windows.h>    
#include <tchar.h>    
      
//用於輸出信息到編譯器輸出窗口的宏定義    
//使用win API,DEBUG版本會執行,RELEASE版本則不會    
//還可以使用DebugView,WinDbg等工具查看輸出    
      
#ifdef _DEBUG    
      
#define DP0(fmt) {TCHAR sOut[256];_stprintf_s(sOut,_T(fmt));OutputDebugString(sOut);}    
#define DP1(fmt,var) {TCHAR sOut[256];_stprintf_s(sOut,_T(fmt),var);OutputDebugString(sOut);}    
#define DP2(fmt,var1,var2) {TCHAR sOut[256];_stprintf_s(sOut,_T(fmt),var1,var2);OutputDebugString(sOut);}    
#define DP3(fmt,var1,var2,var3) {TCHAR sOut[256];_stprintf_s(sOut,_T(fmt),var1,var2,var3);OutputDebugString(sOut);}    
      
#endif    
      
#ifndef _DEBUG    
      
#define DP0(fmt) ;    
#define DP1(fmt, var) ;    
#define DP2(fmt,var1,var2) ;    
#define DP3(fmt,var1,var2,var3) ;    
      
#endif    
      
#endif

其中的DP就是表示BebugPrint。而且這些調試輸出只會在BEBUG版本中有效,在Release版本中就不會有效。
這樣使用:​ ​

#include<stdio.h>   
#include"debugPrint.h"   
void main()   
{   
   for(int i=0;i<10;i++)   
   {   
        printf("hello!\n");   
        DP0("這是調試信息!\n");   
        DP1("這是調試信息%d\n",i);   
        DP2("這是調試信息%d--%d\n",i,i+1);   
        DP3("這是調試信息%d--%d--%d\n",i,i+1,i+2);   
    }   
    getc(stdin);   
}
發佈了5 篇原創文章 · 獲贊 2 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章