天天看點

win32 api應用如何輸出日志log Windows程式設計 visualstudio vs無控制台如何輸出

共兩個代碼,借鑒了《Windows程式設計(第五版)》P34頁代碼

第一步在項目中添加兩個代碼,LogUtil.cpp 和 LogUtil.h

LogUtil.cpp 如下

#include <windows.h>
#include <tchar.h>
#include "LogUtil.h"

#ifndef _DEBUG
void CDECL logd(const TCHAR * szFormat, ...) { }
#else
void CDECL logd(const TCHAR * szFormat, ...) {
	static TCHAR szBuffer[1024];
	static TCHAR szB2[1024];
	static SYSTEMTIME st;
	
	va_list pArgList;
	va_start(pArgList, szFormat);
	_vsnwprintf_s(szBuffer, sizeof(szBuffer) / sizeof(TCHAR), szFormat, pArgList);
	va_end(pArgList);

	GetLocalTime(&st);

	wsprintf(szB2, TEXT("%02d:%02d:%02d.%03d [%d] %s %s\n"),
		// current time
		st.wHour, st.wMinute, st.wSecond, st.wMilliseconds,
		// process id
		GetCurrentProcessId(),
		// debug log
		szDebugPrefix, szBuffer);
	OutputDebugString(szB2);
}
#endif // _DEBUG
           

LogUtil.h 如下

#ifndef LOGUTIL_H
#define LOGUTIL_H

void logd(const TCHAR * szFormat, ...);
extern const TCHAR * szDebugPrefix;

#endif // !LOGUTIL_H
           

第二步在想輸出日志的代碼檔案前面加這麼兩行

#include "LogUtil.h"
const TCHAR * szDebugPrefix = TEXT("WhatClr.cpp");
// 這個szDebugPrefix是輸出日志的字首,我以各個代碼的檔案名作為字首
           

然後就可以輸出日志了,比如

*pcxWindow = 2 * GetSystemMetrics(SM_CXBORDER) +
		12 * tm.tmAveCharWidth;

	*pcyWindow = 2 * GetSystemMetrics(SM_CYBORDER) +
		GetSystemMetrics(SM_CYCAPTION) +
		2 * tm.tmHeight;

	logd(TEXT("*pcxWindow = %d"), *pcxWindow); // 86
	logd(TEXT("*pcyWindow = %d"), *pcyWindow); // 57
           

輸出的日志在哪看?

VS中如果是Ctrl+F5運作vs中是看不到日志輸出的,可以下載下傳DbgView來檢視,可以根據檔案名設定過濾器,高亮自己輸出的日志友善檢視。

win32 api應用如何輸出日志log Windows程式設計 visualstudio vs無控制台如何輸出

VS中直接F5調試的話DbgView中是看不到日志的,在VS自己的輸出框中,如下

win32 api應用如何輸出日志log Windows程式設計 visualstudio vs無控制台如何輸出

繼續閱讀