VC调试信息的输出

李国帅 编2006-9-12 11:29

头文件


//    File Name    :  DbgMsg.h
#ifndef __DBGMSG_H__
#define __DBGMSG_H__

//向哪个窗口打印信息
#ifdef DBGMSG_ASST_WINDOW        //assistant window
#define DbgPrintf DbgAsstwndPrintf
#endif

#ifdef DBGMSG_MSGBOX_WINDOW        //message box window
#define  DbgPrintf DbgMsgboxPrintf
#endif

#ifdef DBGMSG_FILE_OUTPUT            //Output debug message to a file.
#define DbgPrintf DbgFilePrintf
#endif

#ifdef DBGMSG_MSVC_WINDOW            //MS-VC output window
#define DbgPrintf DbgMsVcPrintf
#endif

#ifndef DbgPrintf
#define DbgPrintf DbgMsVcPrintf
#endif



#define DoReturnVal(condition, return_val) \
    if (condition)\
    {                        \
        V();\
        return return_val;    \
    }

#define DoReturn(condition) \
    if (condition)\
    {                        \
        V();\
        return;            \
    }
#define IsEmpty(p)    (p == NULL)
#define IsNull(p)    (p == NULL)
#define IsFalse(p)    (p == FALSE)
#define IsTrue(p)    (p == TRUE)

#ifdef __cplusplus
extern "C" {
#endif //__cplusplus

void DbgMsVcPrintf (char *fmt, ... );
void DbgMsgboxPrintf (char *fmt, ... );
void DbgAsstwndPrintf (char *fmt, ... );
void DbgFilePrintf (char *fmt, ... );
void DbgPopLastError(void);

void DbgWriteStrFile(LPSTR lpszData);

#ifdef __cplusplus
}
#endif //__cplusplus

#endif    //__DBGMSG_H__


函数
//    File Name    :  DbgMsg.CPP
#include "stdafx.h"
#include "DbgPrint.h"

#define DBG_STR_MAX_LEN 256



#define OUTPUT_FILE_NAME "d:\\vc app\\bin\\OUTPUT.LOG"

HWND g_hwndDbgEdit = NULL;

void DbgMsVcPrintf (char *fmt, ... )
{
  va_list argptr;                /* Argument list pointer    */
  char str[DBG_STR_MAX_LEN];    /* Buffer to build sting into    */

  va_start (argptr, fmt);        /* Initialize va_ functions    */
  wvsprintf (str, fmt, argptr);    /* prints string to buffer    */
  va_end (argptr);                /* Close va_ functions        */

  OutputDebugString(str);
  OutputDebugString(TEXT("\r\n"));
}


void DbgMsgboxPrintf (char *fmt, ... )
{
  va_list argptr;                /* Argument list pointer    */
  char str[DBG_STR_MAX_LEN];    /* Buffer to build sting into    */

  va_start (argptr, fmt);        /* Initialize va_ functions    */
  wvsprintf (str, fmt, argptr);    /* prints string to buffer    */
  va_end (argptr);                /* Close va_ functions        */

  MessageBox (NULL, str, "Debug Message(DbgMsgboxPrintf)",
            MB_ICONINFORMATION | MB_OK);
}

void DbgFilePrintf (char *fmt, ... )
{
  FILE *output;
  va_list argptr;                /* Argument list pointer    */
  char str[DBG_STR_MAX_LEN];    /* Buffer to build sting into    */

  va_start (argptr, fmt);        /* Initialize va_ functions    */
  wvsprintf (str, fmt, argptr);    /* prints string to buffer    */
  va_end (argptr);                /* Close va_ functions        */

  output = fopen(OUTPUT_FILE_NAME, "a");
  if( output==NULL )    return;
  fprintf(output, "%s", str);
  fclose(output);
}

void DbgAsstwndPrintf (char *fmt, ... )
{
  va_list argptr;                /* Argument list pointer    */
  char str[DBG_STR_MAX_LEN];    /* Buffer to build sting into    */

  va_start (argptr, fmt);        /* Initialize va_ functions    */
  wvsprintf (str, fmt, argptr);    /* prints string to buffer    */
  va_end (argptr);                /* Close va_ functions        */

  if (g_hwndDbgEdit != NULL)
  {
      SetWindowText(g_hwndDbgEdit, str);
  }
}

void DbgPopLastError(void)
{
    LPVOID lpMsgBuf;
    FormatMessage(    FORMAT_MESSAGE_ALLOCATE_BUFFER |
                    FORMAT_MESSAGE_FROM_SYSTEM,
                    NULL,
                    GetLastError(),
                    MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
                    (LPTSTR) &lpMsgBuf,
                    0,
                    NULL );
    //DbgPrintf (lpMsgBuf);
    MessageBox (NULL, (LPCSTR)lpMsgBuf, "Debug Message(DbgPopLastError)",
                    MB_ICONINFORMATION | MB_OK);
    LocalFree( lpMsgBuf );
}

void DbgWriteStrFile(LPSTR lpszData)
{
    FILE *output;
    output = fopen(OUTPUT_FILE_NAME, "a");
    if( output == NULL )
        return;
    while (*lpszData)
    {
        fwrite (lpszData++, sizeof(char), 1, output);
    }
    fclose(output);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微澜-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值