非MFC程式TRACE和ASSERT宏的一種實現方法

來源:互聯網
上載者:User

    我們知道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。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.