非MFC程序TRACE和ASSERT宏的一种实现方法

    我们知道TRACE和ASSERT宏是MFC框架程序自带的。但是要在非MFC程序中使用这两个宏,我们怎么实现呢。这里给出一种实现的方法。将这两个宏在debug.h文件中实现。程序包含这个头文件就可以了。头文件及说明如下:

 

#ifndef _DEBUG_H_
#define _DEBUG_H_

#ifndef __AFX_H__
#define _T(x) x
#if defined _DEBUG
#include <stdio.h> /* vsprintf */
#include <crtdbg.h>
#define DPRINTF_BUF_SZ  1024
#define  ASSERT(expr)/
do{/
 if (!(expr)&&(1 == _CrtDbgReport(_CRT_ASSERT, __FILE__, __LINE__, NULL, #expr)))/
 {__asm { int 3 };}/
}while(0)

static __inline void TRACE(char *fmt, ...)
{
 va_list args;
 char buf[DPRINTF_BUF_SZ];
 va_start(args, fmt);
 vsprintf(buf, fmt, args);
 OutputDebugString(buf);
// FILE *fp = fopen("d://test.txt","a");
// fwrite(buf,strlen(buf),1,fp);
// fclose(fp);
}
#else
static __inline void TRACE(char *fmt, ...) {}
#define  ASSERT(expr) if (expr) {NULL;}
#endif
#endif
#endif /* _DEBUG_H_ */

 

    稍微做一下解释:

(1){__asm { int 3 };}是系统中断指令,这里在C语言中嵌入了一个简单的汇编语句。

(2)也可以将输出到Debuger的调试语句输出到文本文件。比如:d://test.txt

(3)va_start ,va_arg , va_end 是win32程序实现可变参数的机制。在UNIX下实现稍微有些不同,其包含va_dcl宏。va_list定义为:typedef char * va_list。具体请参考MSND。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值