- 在 main 函数中添加 qSetMessagePattern 函数,能帮助打印出更多有用的信息。
void qSetMessagePattern(const QString &pattern)
函数功能:
Qt 5.0 引入的函数,用于更改默认消息处理程序的输出。
允许调整 qDebug()、qInfo()、qWarning()、qCritical() 和 qFatal() 的输出。此外,qCDebug()、qCInfo()、qCWarning() 和 qCCritical() 的这样的分类日志输出(category logging output)格式也会进行调整。
支持以下占位符:
占位符 | 描述 |
---|---|
%{appname} |
QCoreApplication::applicationName() 返回的应用程序名称 |
%{category} |
日志类别 |
%{file} |
源文件路径 |
%{function} |
函数名 |
%{line} |
源文件中的行号 |
%{message} |
实际的日志消息内容 |
%{pid} |
QCoreApplication::applicationPid() 返回的进程 ID |
%{threadid} |
当前线程的系统级 ID(如果可获取) |
%{qthreadptr} |
指向当前 QThread 的指针(QThread::currentThread() 的结果) |
%{type} |
日志类型:"debug"、"warning"、"critical" 或 "fatal" |
%{time process} |
日志消息发生的时间(以进程启动后的秒数计算,"process" 为字面量) |
%{time boot} |
日志消息发生的时间(以系统启动后的秒数计算,"boot" 为字面量)。如果无法获取系统启动时间,输出值不确定(参见 QElapsedTimer::msecsSinceReference() ) |
%{time [format]} |
日志消息发生时的系统时间,格式由传入的 format 参数控制(传给 QDateTime::toString() )。若未指定 format ,则使用 Qt::ISODate 格式 |
%{backtrace [depth=N] [separator="..."]} |
调用栈,帧数由可选参数 depth 指定(默认 5),帧间分隔符由可选参数 separator 指定(默认 `" |
还可以根据消息的类型使用条件判断,如果希望只当类型匹配时才输出,可以使用
%{if-debug}
、%{if-info}
、%{if-warning}
、%{if-critical}
或%{if-fatal}
,并以%{endif}
结束。此外,
%{if-category} ... %{endif}
之间的文本仅在类别不是默认类别时才会被输出。示例:
QT_MESSAGE_PATTERN="[%{time yyyyMMdd h:mm:ss.zzz t} %{if-debug}D%{endif}%{if-info}I%{endif}%{if-warning}W%{endif}%{if-critical}C%{endif}%{if-fatal}F%{endif}] %{file}:%{line} - %{message}"
默认的模式是:
"%{if-category}%{category}: %{endif}%{message}"
模式也可以在运行时通过设置环境变量
QT_MESSAGE_PATTERN
来更改;如果同时调用了qSetMessagePattern()
且设置了QT_MESSAGE_PATTERN
,则环境变量优先。注意: 消息模式仅适用于非结构化日志(例如默认输出到 stderr 的日志)。像 systemd 这样的结构化日志系统会直接记录原始消息,并尽可能附带更多可获取的结构化信息。
自定义消息处理程序可以使用
qFormatLogMessage()
来考虑消息模式。
- 在生产环境调试一个 GUI 程序,只要一点改动,就可以让程序运行时附带控制台,来方便调试。
生产环境是 Windows 平台,在.pro文件中添加 CONFIG += console
,然后在 Qt Creator 中,勾选 项目>构建和运行>运行设置>在终端中运行
的单选框。若使 MS Dev studio,在等价于在菜单选项 Project Properties>Configuration Properties>Linker>System>Subsystem>Console 。
生产环境是 Linux 平台,直接在命令行窗口启动可执行文件,可在命令行窗口查看调试信息。