在现代软件开发中,多线程和时间敏感的项目越来越多,对日志记录工具的需求也随之增加。Visual C++集成的调试器虽然功能强大,但在多线程环境下却显得力不从心。本文将介绍一个名为CDebugPrintf的类,它提供了一些在多线程应用中非常有用的功能,并且可以轻松地集成到Visual C++项目中。
CDebugPrintf类的主要特点包括:
要将CDebugPrintf类集成到项目中,只需将dbg.h和dbg.cpp文件包含到项目中。
日志文件的输出示例如下:
0.000 08/25/2000 15:04:48 User name = KVA
0.015 08/25/2000 15:04:48 ISAPI = "TraxDataMgr.dll"
0.015 08/25/2000 15:04:48 CActionHandler constructor
0.015 08/25/2000 15:04:48 CDataMgrActionHandler constructor
5.123 08/25/2000 15:04:53 0 HttpExtensionProc: started
5.123 08/25/2000 15:04:53 Execute request 1 started.
5.672 08/25/2000 15:04:53 CIndexer constructor: done
5.693 08/25/2000 15:04:53 Open: D:\Data\Docs\customer
5.693 08/25/2000 15:04:53 Loading index table from 'D:\Data\Docs\customer.idx'
5.693 08/25/2000 15:04:53 Count: 93560
6.132 08/25/2000 15:04:54 Index loading finished ... OK
6.375 08/25/2000 15:04:54 Execute request 1 finished.
6.375 08/25/2000 15:04:54 0 HttpExtensionProc: finished
以下是如何在C++中使用CDebugPrintf类的一个示例:
void SomeFunction(char * arg1, int arg2, string& arg3) {
// doing something
...
PRINTF("Something happened by using %s and %d arguments", arg1, arg2);
...
// doing something
...
PRINTF(arg3);
...
SHOW_CONSOLE();
PRINTF("This message is visible on console and in log-file.");
}
所有日志消息必须适应一行源代码,因为从发布版本中透明地移除日志消息存在问题。
PRINTF("One line messages are supported.");
PRINTF("Multi-line messages %s %s", "
are not",
"
supported.");