Maxbad`Blog

debug调试打印日志[printf(),OutputDebugString()]

2020-11-04 · 2 min read
#ifdef _DEBUG
inline char* getDateTime() {
	static char nowtime[20];
	time_t rawtime;
	struct tm* ltime;
	time(&rawtime);
	ltime = localtime(&rawtime);
	strftime(nowtime, 20, "%H:%M:%S", ltime);
	return nowtime;
}
#define DBG_PRINTF(format,...) printf("%s <%05d><%s>\t" format"\n",getDateTime(),__LINE__, __FUNCTION__, ##__VA_ARGS__)
#else
#define DBG_PRINTF(format,...)
#endif
#include <iostream>
#include <Windows.h>

template <typename... Args>
void LogError(const char* fmt, Args... args) {
	size_t strsize = snprintf(nullptr, 0, fmt, args...) + 1;

	char* outstr = (char*)malloc(strsize);
	snprintf(outstr, strsize, fmt, args...);

	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED);
	std::cout << outstr << std::endl;

	free(outstr);
}

template <typename... Args>
void LogWarning(const char* fmt, Args... args) {
	size_t strsize = snprintf(nullptr, 0, fmt, args...) + 1;

	char* outstr = (char*)malloc(strsize);
	snprintf(outstr, strsize, fmt, args...);

	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN);
	std::cout << outstr << std::endl;

	free(outstr);
}

template <typename... Args>
void Log(const char* fmt, Args... args) {
	size_t strsize = snprintf(nullptr, 0, fmt, args...) + 1;

	char* outstr = (char*)malloc(strsize);
	snprintf(outstr, strsize, fmt, args...);

	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7);
	std::cout << outstr << std::endl;

	free(outstr);
}

int main(int argn, char** argv)
{
	LogError("%s", "LogError");
	LogWarning("%s", "LogWarning");
	Log("%s", "Log");

	getchar();
	return 0;
}