当前位置: 首页 > ds >正文

Qt 调试信息重定向到本地文件

1、在Qt软件开发过程中,我们经常使用qDebug()输出一些调试信息在QtCreator终端上。
  但若将软件编译、生成、打包为一个完整的可运行的程序并安装在系统中后,系统中没有QtCreator和编译环境,那应用程序出现问题,如何输出信息排查呢?
  
2、一个好方法就是Qt调试信息重定向本地文件,即仍然使用qDebug()等函数,但设置后调试信息不输出在终端上,而是输出到指定路径的日志文件中,这样我们就可以通过日志进行调试。

3、Qt提供了5个全局信息输出函数,对应不同级别:
  (1)、qDebug(): 调试信息。
  (2)、qInfo(): 普通信息。
  (3)、qWarning(): 警告信息。
  (4)、qCritical(): 关键错误和系统错误信息。
  (5)、qFatal(): 致命错误信息,如果运行qFatal(),应用程序会立即终止。
  
4、Qt调试信息重定向本地文件,只要实现消息处理函数,然后通过qInstallMessageHandler重定义,就可以将调试信息输出到指定路径的文件中了。

5、示例: (main.cpp, 其它文件略)

//main.cpp#include "widget.h"
#include <QApplication>
#include <QMutex>
#include <QDateTime>
#include <QFile>
#include <QDebug>static QMutex mutex;
void MyLog(QtMsgType type, const QMessageLogContext & context, const QString & message)
{mutex.lock();QString strType;switch (type) {case QtDebugMsg:strType = "Debug";break;case QtInfoMsg:strType = "Info";break;case QtWarningMsg:strType = "Warning";break;case QtCriticalMsg:strType = "Critical";break;default:break;}QString strFile = context.file;QString strLine = QString::number(context.line);QString strFunc = context.function;QString strTime = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss");QString strLog = QString("[%1][%2][%3][%4][%5]%6.").arg(strType).arg(strFile).arg(strLine).arg(strFunc).arg(strTime).arg(message);QString strFileName = QString("App_%1.log").arg(QDateTime::currentDateTime().toString("yyyyMMdd"));QFile file(strFileName);file.open(QIODevice::WriteOnly | QIODevice::Append);QTextStream stream(&file);stream << strLog << "\r\n";file.flush();file.close();mutex.unlock();
}int main(int argc, char *argv[])
{QApplication a(argc, argv);qInstallMessageHandler(MyLog);qDebug() << "This is Debug";qInfo() << "This is Info";qWarning() << "This is Warning";qCritical() << "This is Critical";Widget w;w.show();return a.exec();
}

//运行结果,在exe同级目录下有一个如App_20250425.log文件,里面包含各种输出信息。

[Debug][..\..\main.cpp][57][int __cdecl main(int,char *[])][2025-04-25 16:55:49]This is Debug.
[Info][..\..\main.cpp][58][int __cdecl main(int,char *[])][2025-04-25 16:55:49]This is Info.
[Warning][..\..\main.cpp][59][int __cdecl main(int,char *[])][2025-04-25 16:55:49]This is Warning.
[Critical][..\..\main.cpp][60][int __cdecl main(int,char *[])][2025-04-25 16:55:49]This is Critical.
[Debug][..\..\main.cpp][57][int __cdecl main(int,char *[])][2025-04-25 16:56:51]This is Debug.
[Info][..\..\main.cpp][58][int __cdecl main(int,char *[])][2025-04-25 16:56:51]This is Info.
[Warning][..\..\main.cpp][59][int __cdecl main(int,char *[])][2025-04-25 16:56:51]This is Warning.
[Critical][..\..\main.cpp][60][int __cdecl main(int,char *[])][2025-04-25 16:56:51]This is Critical.

http://www.xdnf.cn/news/1940.html

相关文章:

  • 深度学习--循环神经网络RNN
  • 自动化必备技能:JSONPath介绍
  • 【粉丝福利社】DeepSeek企业级AI应用实践
  • JPEG 解码 第28次CCF-CSP计算机软件能力认证
  • 《天道》:我发现能压制小人的人,都有一个共同点
  • 2025毕业生必看!用AI工具如何快速生成万字高质量论文
  • SQL Server 2019 安装与配置详细教程
  • Web 服务架构与技术组件概述
  • AI 开发工具提示词集体开源!解锁 Cursor、Cline、Windsurf 等工具的核心逻辑
  • 信创系统上使用 dpkg-repack 工具打包系统已安装软件
  • 用于渗透测试人员的 Burpsuite:Logger++
  • 二重积分的计算
  • 软件设计模式与体系结构:基于Java实现管道-过滤器架构
  • mapbox高阶,使用本地dem数据、等高线面数据实现千里江山图效果
  • Shell脚本-流程控制语句应用案例
  • 从代码学习深度学习 - 微调 PyTorch 版
  • 数据结构初阶:排序
  • 【MySQL专栏】MySQL数据库的复合查询语句
  • Pycharm(六):可变与不可变类型
  • 【时时三省】(C语言基础)循环程序举例
  • 手把手搭建AIGC应用:从图像生成到智能写作全实战
  • 使用 n8n 实现你的第一个爬虫程序:从零到自动化
  • 【金仓数据库征文】- 金融HTAP实战:KingbaseES实时风控与毫秒级分析一体化架构
  • 飞牛 NAS 整机要来了?!
  • C#高级语法--接口
  • 初识HashMap
  • 华为L410上制作内网镜像模板:在客户端配置模板内容
  • 施工配电箱巡检二维码应用
  • 【EDA】EDA中聚类(Clustering)和划分(Partitioning)
  • STM32F103C8T6信息