c/c++開發中經常需要輸出除錯資訊,我們一般使用outputdebugstring
輸出到debugview或者偵錯程式輸出視窗。
outputdebugstring
原型如下:
void winapi outputdebugstring(
lpctstr lpoutputstring
);
它只支援乙個字串引數。
在實際使用中,一般都會將其封裝,支援可變引數,方便呼叫。
封裝了2個函式tracemsga
和tracemsgw
,分別支援窄字元和寬字元:
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
tracemsgw
和tracemsga
支援可變引數(類似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巨集,查了資料...