调试打印机制

  1. 1 调试打印函数
  2. 2 自定义信息输出格式
  3. 3 自定义信息处理函数

1 调试打印函数

函数名 描述
qDebug() 用于打印自定义调试信息
qInfo() 用于打印信息
qWarning() 用于打印警告信息和获取错误
qCritical() 用于打印严重错误信息和报告系统错误
qFatal() 用于打印致命错误信息,并退出程序

2 自定义信息输出格式

默认情况下,这些函数会将信息输出到默认终端。 使用“QT_MESSAGE_PATTERN"环境变量可以指定输出信息的格式,例如
“QT_MESSAGE_PATTERN="[%{type}] %{appname} (%{file}:%{line}) - %{message}",除了设置该环境变量之外,也可以使用"qSetMessagePattern()“函数来设置。

3 自定义信息处理函数

使用qinstallMessageHandler()可以来设置调试打印函数的处理函数,示例如下:

#include <QCoreApplication>
#include <QDebug>
#include <QFile>
#include <QTextStream>

void customMessageHandler(QtMsgType type, const QMessageLogContext &context, const QString &msg)
{
    QString txt;
    switch (type) {
    //调试信息提示
    case QtDebugMsg:
        txt = QString("Debug: %1").arg(msg);
        break;

        //一般的warning提示
    case QtWarningMsg:
        txt = QString("Warning: %1").arg(msg);
        break;
        //严重错误提示
    case QtCriticalMsg:
        txt = QString("Critical: %1").arg(msg);
        break;
        //致命错误提示
    case QtFatalMsg:
        txt = QString("Fatal: %1").arg(msg);
        abort();    /*这里程序异常退出*/
    }

    QFile outFile("debuglog.txt");
    outFile.open(QIODevice::WriteOnly | QIODevice::Append);
    QTextStream ts(&outFile);
    ts <<context.file<<":"<<context.line<<"-fun-"<<context.function<<txt << endl;
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    //先注册自己的MsgHandler
    qInstallMessageHandler(customMessageHandler);

    //以后就可以像下面这样直接打日志到文件中,而且日志也会包含时间信息
    qDebug("This is a debug message, Hello %s", "jake");
    qWarning("This is a warning message!!");
    qCritical("This is a critical message!");
    qFatal("This is a fatal message!!");

    return a.exec();
}

如果“QT_FATAL_WARNINGS”环境变量被设置,那qWarning()会在输出信息后退出程序。
在默认情况下,如果不想某个打印函数输出信息,可以编译时定义如下对应的宏,”QT_NO_DEBUG_OUPUT, QT_NO_INFO_OUPUT, QT_NO_WARNING_OUPUT“


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 add358@163.com

文章标题:调试打印机制

文章字数:471

本文作者:Jake Yang

发布时间:2018-07-05, 00:00:00

最后更新:2019-12-16, 16:14:02

原始链接:https://add358.github.io/2018/07/05/Libs-Qt-2018-07-05-调试打印机制/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏