OutputDebugString完美封裝

2021-08-13 10:11:49 字數 1285 閱讀 1139

c/c++開發中經常需要輸出除錯資訊,我們一般使用outputdebugstring輸出到debugview或者偵錯程式輸出視窗。

outputdebugstring原型如下:

void winapi outputdebugstring(

lpctstr lpoutputstring

);

它只支援乙個字串引數。

在實際使用中,一般都會將其封裝,支援可變引數,方便呼叫。

封裝了2個函式tracemsgatracemsgw,分別支援窄字元和寬字元:

void tracemsgw(const wchar_t *lpformat, ...) 

pmsgbuffer = (wchar_t*) malloc(imsgbufcount * sizeof(wchar_t));

if(!pmsgbuffer)

hr = stringcchvprintfw(pmsgbuffer, imsgbufcount, lpformat, arglist);

}va_end(arglist);

if(hr == s_ok)

if(pmsgbuffer)

}

void tracemsga(const char *lpformat, ...) 

pmsgbuffer = (char*) malloc(imsgbufcount * sizeof(char));

if(!pmsgbuffer)

hr = stringcchvprintfa(pmsgbuffer, imsgbufcount, lpformat, arglist);

}va_end(arglist);

if(hr == s_ok)

if(pmsgbuffer)

}

#if (defined unicode) || (defined _unicode)

#define tracemsg tracemsgw

#else

#define tracemsg tracemsga

#endif

tracemsgwtracemsga支援可變引數(類似printf)。

它最大的優點的是緩衝區可以自動增長,不用擔心緩衝區不夠,輸出內容被截斷。

使用OutputDebugString除錯視窗程式

學程式設計是從dos下開始的,用了一定時間的tc2.0,使得養成了用printf輸出變數值進行除錯的壞習慣。到了寫視窗程式時,就遇到了些麻煩。視窗程式沒有方便的進行控制台輸出的方法 其實是我不知道 於是,用了幾年的用messagebox進行輸出的除錯手段,太麻煩了,因為messagebox會打斷程式...

關於OutputDebugString的模擬

從這篇文章中可以知道,通過簡單的幾步設定,便可模擬outputdebugstring,可以用下面的 描述 struct dbwin buffer void myoutputdebugstring lpctstr lpoutputstring closehandle hdataevent if hda...

使用OutputDebugString輸出除錯資訊

概要 在編寫控制台程式的時候我們經常會使用printf輸出除錯資訊,使我們了解程式的狀態,方便除錯,但是當編寫非控制台程式的時候這種方法就行不通了。可以使用以下方法 1 使用log機制 2 用trace巨集 3 其他 首先,使用log機制的話要先寫乙個log系統,麻煩。而關於trace巨集,查了資料...