#define DBG_PRINT // 調試輸出開關
#ifdef DBG_PRINT
#define dbgprt(fmt,...) do{printf("DBG-PRINT:");printf(fmt,##__VA_ARGS__);}while(0)
#else
#define dbgprt(fmt,...)
#endif
對於寫日誌信息到文件,也可以將fprintf的封裝成類似於printf函數一樣的接口,這樣在需要輸出調試信息的時候就會很方便的調用了。以下通過對fprintf封裝重新定義了一套輸出調試信息到文件接口。
/********************************************************************
created: 2011-09-26
author: firehood
*********************************************************************/
//////////////////////////////////////////////////////////////////////
#include <stdarg.h>
//////////////////////////////////////////////////////////////////////
#define PRINT_LOG // 打印輸出開關
#ifdef PRINT_LOG
void DbgPrintToFileStart(void);
void DbgPrintToFile(const TCHAR *format,...);
void DbgPrintToFileEnd(void);
#define PrintStart() DbgPrintToFileStart();
#define PrintLog(format,...) DbgPrintToFile(format,##__VA_ARGS__);
#define PrintEnd() DbgPrintToFileEnd();
#else
#define PrintStart()
#define PrintLog(format,...)
#define PrintEnd()
#endif
static FILE *fp = NULL;
void DbgPrintToFileStart()
{
if(!fp)
fp = fopen("\\NAND2\\DbgLog.Log", "a+");
}
void DbgPrintToFile(const char *format,...)
{
va_list ap;
va_start(ap,format);
//vprintf(format,ap); // 打印到串口
if(fp) vfprintf(fp,format,ap); // 寫文件
va_end(ap);
fflush(fp);
}
void DbgPrintToFileEnd(void)
{
if(fp)
{
fclose(fp);
fp = NULL;
}
}
//////////////////////////////////////////////////////////////////////
這樣,在程序啓動和退出時分別調用PrintStart()、PrintEnd(),在程序執行過程中,可以很方便的通過PrintLog()輸出調試信息到文件了。