QT使用自定义消息处理器时qDebug()不显示文件、行号、函数信息问题
Qt Release模式下日志上下文信息丢失解决方案
问题原因
Qt默认在Release构建模式下会自动禁用日志上下文信息的编译导出,目的是减小最终生成的二进制文件体积、优化执行效率,因此QMessageLogContext结构体中的file、line、function字段默认不会被赋值,才会出现空指针或行号为0的情况。
修复方法
- 如果你使用qmake构建项目:在项目的
.pro文件中添加如下定义,重新执行qmake后全量编译即可DEFINES += QT_MESSAGELOGCONTEXT - 如果你使用CMake构建项目:在项目的
CMakeLists.txt中添加如下定义,重新生成构建配置后全量编译即可# 全局生效 add_compile_definitions(QT_MESSAGELOGCONTEXT) # 仅对指定目标生效(更推荐,避免影响不需要日志的模块) # target_compile_definitions(你的应用/库目标名 PRIVATE QT_MESSAGELOGCONTEXT)
注意事项
- 开启
QT_MESSAGELOGCONTEXT宏后,Release版本的二进制体积会有小幅上涨,涨幅和你项目中使用日志接口的代码量成正比,如果对二进制体积有严格要求,可以仅给需要输出调试日志的模块添加该宏定义。 - 确保项目中没有定义
QT_NO_DEBUG_OUTPUT、QT_NO_INFO_OUTPUT这类关闭对应级别日志输出的宏,否则对应级别的日志连内容都不会生成。
内容的提问来源于stack exchange,提问作者Ghita
相关产品推荐
相关产品推荐

