win中release版程序trace

0 views
Skip to first unread message

小刀客

unread,
Nov 10, 2009, 1:22:28 AM11/10/09
to programming with GNU software
release版程序trace输出到一个命令窗口的实现方法

1、trace.c

#include "trace.h"
#include <windows.h>
#include <stdio.h>
#include <stdarg.h>
int TraceInit()
{
return AllocConsole();
}
int TraceClose()
{
return FreeConsole();
}
int TraceOut(char* format,...)
{
char msg[1024];
unsigned long count = 0;
HANDLE hStdOut=GetStdHandle(STD_OUTPUT_HANDLE);
if(hStdOut == INVALID_HANDLE_VALUE )
return 0;
va_list argList;
va_start(argList, format);
vsprintf(msg,format, argList);
va_end(argList);
WriteFile(hStdOut,msg,strlen(msg),&count,NULL);
return count;
}

2、trace.h
#ifndef _GE_TRACE_H_
#define _GE_TRACE_H_
#ifdef __cplusplus
extern "C" {
#endif
static void dummy(char* format,...){}
#ifdef TRACE_ENABLE
#define GETRACE TraceOut("Trace at File:%s Line:%d
\n",__FILE__,__LINE__)

#define TRACE_INIT TraceInit()

#define TRACE_CLOSE TraceClose()

#define TRACE_OUT TraceOut
#else
#define GETRACE

#define TRACE_INIT

#define TRACE_CLOSE
#define TRACE_OUT dummy
#endif
int TraceInit();
int TraceClose();
unsigned long TraceOut(char* format,...);
#ifdef __cplusplus
}
#endif
#endif

3、使用方法:
编译的时候加入 TRACE_ENABLE,不加这个宏定义,可以取消trace
在程序的入口处 TRACE_INIT;
程序退出的时候 TRACE_CLOSE;
在需要trace的时候,可以写 GETRACE; 也可以 TRACE_OUT(char* fmt,..);
Reply all
Reply to author
Forward
0 new messages