共兩個代碼,借鑒了《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來檢視,可以根據檔案名設定過濾器,高亮自己輸出的日志友善檢視。
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNvwVZ2x2bzNXak9CX90TQNNkRrFlQKBTSvwFbslmZvwFMwQzLcVmepNHdu9mZvwFVywUNMZTY18CX052bm9CX10ERPlXU650MFpHW4Z0MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2LcRHelR3LcJzLctmch1mclRXY39TOykTNyMzMxETOxgDM4EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
VS中直接F5調試的話DbgView中是看不到日志的,在VS自己的輸出框中,如下