Qt中qDebug()技巧初探
一、发布时屏蔽debug 消息
发布程序时,去掉debug打印,可以加快程序执行速度,减小程序体积。
然而手动注释很麻烦,在pro文件里加上一行预定义宏即可。
DEFINES QT_NO_DEBUG_OUTPUT
二、debug 程序定位
例如:qDebug() << FILE << LINE << message;
这样debug小消息message就可以定位在程序文件中的某一行了。
三、Qt利用qDebug输出信息到文件
- 新建dlog.h
#ifndef DLOG_H
#define DLOG_H
#include <qapplication.h>
#include <QDateTime>
#include <QFile>
#include <QTextStream>
#include <QtMsgHandler>
#include <QMessageLogContext>
#include <QMutex>
void myMsgOutput(QtMsgType type, const QMessageLogContext &context, const QString& msg)
{
static QMutex mutex;
mutex.lock();
QString time=QDateTime::currentDateTime().toString(QString("[ yyyy-MM-dd HH:mm:ss:zzz ]"));
QString mmsg;
switch(type)
{
case QtDebugMsg:
mmsg=QString("%1: Debug:\t%2 (file:%3, line:%4, func: %5)").arg(time).arg(msg).arg(QString(context.file)).arg(context.line).arg(QString(context.function));
break;
case QtInfoMsg:
mmsg=QString("%1: Info:\t%2 (file:%3, line:%4, func: %5)").arg(time).arg(msg).arg(QString(context.file)).arg(context.line).arg(QString(context.function));
break;
case QtWarningMsg:
mmsg=QString("%1: Warning:\t%2 (file:%3, line:%4, func: %5)").arg(time).arg(msg).arg(QString(context.file)).arg(context.line).arg(QString(context.function));
break;
case QtCriticalMsg:
mmsg=QString("%1: Critical:\t%2 (file:%3, line:%4, func: %5)").arg(time).arg(msg).arg(QString(context.file)).arg(context.line).arg(QString(context.function));
break;
case QtFatalMsg:
mmsg=QString("%1: Fatal:\t%2 (file:%3, line:%4, func: %5)").arg(time).arg(msg).arg(QString(context.file)).arg(context.line).arg(QString(context.function));
abort();
}
QFile file("debug.txt");
file.open(QIODevice::ReadWrite | QIODevice::Append);
QTextStream stream(&file);
stream << mmsg << "\r\n";
file.flush();
file.close();
mutex.unlock();
}
#endif // DLOG_H
- 修改main.cpp
#include "tool/dlog.h"
qInstallMessageHandler(myMsgOutput);
- pro文件
DEFINES += QT_MESSAGELOGCONTEXT