Qt笔记---Debug输出到文件

Qt笔记---Debug输出到文件

        平时在开发过程中我们使用qDebug()函数将运行过程中需要打印的调试信息输出到编译器的调试窗口中,在软件打包发布后如果我们仍需查看调试信息,可将qDebug的打印信息导入到文件中查看。

使用方法

void outLogMessageToFile(QtMsgType type, const QMessageLogContext &context, const QString &msg)
{
	if (type == QtDebugMsg)
	{
		QString message;
		message = qFormatLogMessage(type, context, msg);
		message.append("\r\n");

		QFile file(g_logFile); //写文件路径
		if (file.open(QIODevice::WriteOnly | QIODevice::Append))
		{
			file.write(message.toLocal8Bit());
		}

		file.close();
	}
}

int main(int argc, char *argv[])
{
	// 设置qDebug输出格式
	qSetMessagePattern("[%{time yyyy-MM-dd hh:mm:ss}] %{file} %{line} %{function} %{message}");
	// 安装消息器
	qInstallMessageHandler(outLogMessageToFile);

	QApplication a(argc, argv);
    ...
    return a.exec();
}

首先需要实现一个消息输出的处理函数:

void outLogMessageToFile(QtMsgType type, const QMessageLogContext &context, const QString &msg)

其中type表示消息的类型,有以下这些类型
QtDebugMsg
QtInfoMsg
QtWarningMsg
QtCriticalMsg
QtFatalMsg

在示例代码中只捕获了debug类型的输出。context参数中包含了输出消息时的文件名称,文件行数,函数名称等内容。msg参数则是需要输出的debug内容。

在main函数中通过qSetMessagePattern函数可设置qdebug的输出格式,最后使用qInstallMessageHandler函数将消息处理函数传入安装消息器。

使用此种方法后将会导致原来的调试窗口无法再看到调试信息,若想恢复只需要屏蔽qInstallMessageHandler函数即可。

遇到的问题

在release模式下无法输出context参数中具体的信息,全都以unknown显示,因为在release模式下,行号,文件等信息默认会被舍弃掉。

①在qtcreator中需要在.pro文件中添加

DEFINES += QT_MESSAGELOGCONTEXT

②在vs中属性->配置属性->C/C+±>预编译器定义中添加这一项即可。

在这里插入图片描述

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值