调试打印机制
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" 转载请保留原文链接及作者。