小刀客
unread,Nov 10, 2009, 1:22:28 AM11/10/09Sign in to reply to author
Sign in to forward
You do not have permission to delete messages in this group
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
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,..);