Print debug message based on MSVC

本文介绍在MSVC编译环境下,如何重新设计并实现调试日志打印功能,以替代原先在MinGW环境下使用的方法。文章详细展示了logprinter.h和logprinter.cpp的代码实现,包括初始化日志文件路径、定义打印函数以及处理可变参数。
摘要由CSDN通过智能技术生成

之前有写过:Print debug message based on MinGW 。那是在MinGW的编译环境下输出调试信息到本地文件中。如果换成MSVC的编译环境,原来的方法就行不通了,因为某些函数和语法不支持:


#ifndef LOG_H
#define LOG_H

#include <stdarg.h>
#include <QDebug>
#include <QString>
#include <unistd.h>
#include <stdio.h>

#define DEBUG 1

static QString logFilePath;

void LogInit();

void LOGBASE(const char *file, const int line, const char *funcName, const char * fmt, ...);

#define  LOGDBG(fmt,args...)   LOGBASE(__FILE__,__LINE__,__FUNCTION__, fmt, ##args)

#endif /* LOG_H_ */

##args是不被MSVC认识的,另外sprintf,truncate等函数也因为环境的改变而无法正常工作(新的编译器不认识)。
故,需要重新设计实现的细节:
logprinter.h


#ifndef LOGPRINTER_H
#define LOGPRINTER_H

#include <stdarg.h>
#include <QDebug>
#include <stdio.h>
#include <QString>
#include <windows.h>
#include <io.h>
#include <QCoreApplication>

#if _MSC_VER
#define snprintf _snprintf
#endif

static QString logFilePath;

void LogInit();

void print( const char* file, const int line, const char * fmt, ...);

#define printer(...) print( __FILE__, __LINE__, __VA_ARGS__ )

#endif // LOGPRINTER_H

logprinter.cpp

#include "logprinter.h"
#include <stdio.h>

void LogInit()
{
    logFilePath = QCoreApplication::applicationDirPath();
    logFilePath = logFilePath + "/log.txt";
    if(  0 == _access( logFilePath.toStdString().c_str(), 0 ) )
    {
        _unlink( logFilePath.toStdString().c_str() );
    }
}

void print(const char *file, const int line, const char *fmt, ...)
{
    const int BUFFSIZE = 1024;
    char buffer[ BUFFSIZE ] = {0};
    int offset = 0;
    FILE *fp = NULL;

    offset = snprintf( buffer + offset, BUFFSIZE - offset, "[%s, %d]\n", file, line );
    va_list vap;
    va_start( vap, fmt );  //variable arguments list vap init
    vsnprintf( buffer + offset, BUFFSIZE - offset, fmt, vap ); // add list vap to buff
    va_end( vap );

    fp = fopen( logFilePath.toStdString().c_str(), "a" );
    if( NULL != fp )
    {
        fprintf( fp, "%s", buffer );
        fclose( fp );
    }
}

相关应用:
https://github.com/theArcticOcean/CLib/tree/master/MSVCLogprinter

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值