公司建设官方网站全国最大的源码平台
公司建设官方网站,全国最大的源码平台,wordpress小工具打不开,微信网站小游戏在Qt中#xff0c;一般习惯使用qDebug信息进行输出和打印调试信息到console或者文件中#xff0c;在qDebug中#xff0c;也有一些小技巧#xff0c;可以帮助我们更好的使用qDebug打印日志记录#xff0c;本文分享了qDebug使用的一些小技巧。 1. 打印出文件名、行号、调用函… 在Qt中一般习惯使用qDebug信息进行输出和打印调试信息到console或者文件中在qDebug中也有一些小技巧可以帮助我们更好的使用qDebug打印日志记录本文分享了qDebug使用的一些小技巧。 1. 打印出文件名、行号、调用函数等上下文信息 有些时候是不是可能会遇见这样的事情自己不知道在哪儿打印了一串debug信息但是现在不知道在哪儿了并且由于文件很多比较难以寻找。本次提到的方法就可以解决这个问题。首先要明白一件事打印出行号、文件名一定要在调用qDebug时就知道当前位置C语言是通过 __FILE__ __LINE__ 这些东西得到的而qDebug也是一样的方式它是一个宏实现是这个样子的。
#define qDebug QMessageLogger(QT_MESSAGELOG_FILE, QT_MESSAGELOG_LINE, QT_MESSAGELOG_FUNC).debug
#define qInfo QMessageLogger(QT_MESSAGELOG_FILE, QT_MESSAGELOG_LINE, QT_MESSAGELOG_FUNC).info
#define qWarning QMessageLogger(QT_MESSAGELOG_FILE, QT_MESSAGELOG_LINE, QT_MESSAGELOG_FUNC).warning
#define qCritical QMessageLogger(QT_MESSAGELOG_FILE, QT_MESSAGELOG_LINE, QT_MESSAGELOG_FUNC).critical
#define qFatal QMessageLogger(QT_MESSAGELOG_FILE, QT_MESSAGELOG_LINE, QT_MESSAGELOG_FUNC).fatal而其中
#define QT_MESSAGELOG_FILE __FILE__
#define QT_MESSAGELOG_LINE __LINE__
#define QT_MESSAGELOG_FUNC Q_FUNC_INFO所以qDebug 本身应该是支持了打印上下文信息的但是为什么我们平时打印的信息没有呢 这个是因为需要去设置一下message的pattern 设置pattern有两种方法 qSetMessagePattern 函数 通过函数设置格式例如: qSetMessagePattern([%{type}]%{file}:%{line}\t%{time}\t%{function}\n%{message}) QT_MESSAGE_PATTERN 环境变量 通过设置全局环境变量或者使用qputenv(QT_MESSAGE_PATTERN, [%{type}]%{file}:%{line}\t%{time}\t%{function}\n%{message});的手法来设置pattern 或者换个思路qt为我们提供了一个handle使用 qInstallMessageHandler设置
void msgHandle(QtMsgType type, const QMessageLogContext context, const QString msg)
{printf(Debug: %s (%s:%u, %s)\n, localMsg.constData(), context.file, context.line, context.function);
}qInstallMessageHandler(msgHandle);
2. 将qDebug内容输出到文件中 将qDebug输出到文件当中则是直接采用 qInstallMessageHandler的思路来做在这个函数中将printf改成fprintf即可。
3. 正式运行时屏蔽掉 debug 信息 在qlogging.h中有一段代码
#if defined(QT_NO_DEBUG_OUTPUT)
# undef qDebug
# define qDebug QT_NO_QDEBUG_MACRO
#endif意味着其实当定义了上面的qDebug宏后其实下面还有宏条件重新定义展开看看 QT_NO_QDEBUG_MACRO则是
#define QT_NO_QDEBUG_MACRO while (false) QMessageLogger().noDebug所以我们在编译时加入一个宏即可pro文件直接写法如下
DEFINES QT_NO_DEBUG_OUTPUT
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/89516.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!