若该文为原创文章,转载请注明原文出处
本文章博客地址:https://hpzwl.blog.csdn.net/article/details/128671382
红胖子(红模仿)的博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中…(点击传送门)
Qt开发专栏:各种问题解决(点击传送门)
国产麒麟系统相关开发
问题
解决之前的.xsession-erros磁盘占用后,运行时间从原来的四五小时到八九小时会再被占满。
因为程序保存的日志,原始协议,归档数据,连接的设备都比较多,其qDebug的也多。
相关
《关于 国产麒麟系统上长时间运行Qt程序.xsession-erros文件占满磁盘导致无法写入 的解决方法》
《关于 国产麒麟系统上长时间运行Qt程序根目录/下磁盘空间占用100%导致无法写入 的解决方法》
原因
1.发现在现场设备实体机上桌面启动应用程序,qDebug和qWarn打印信息被默认写入syslog。
2.正常情况写入syslog,需要程序自己引入syslog然后写入,但是麒麟系统在特定的机型上不是(现场机)。
3.麒麟系统在多个不同人(不少于3个不同笔记本)的虚拟机上是不会,多个物理台式机的虚拟机也不会,直接安装麒麟系统的笔记本也不会,只有现场的设备(设备相对比较老了)有这个情况。
4.最关键的问题,就是syslog本身是回滚配置日志,只保存一定时间一定大小的日志,可能配置上是按照天或者一周一个文件,所以出现此问题,在arm-linux上一般配置syslog是大小行数回滚,不按照日期回滚,让然此次也是因为联调的设备达到7个+双备份设备都要记录,才会出现打印的数据如此之大,老程序一般不记录这些所以没有明显发现问题。
研发习惯
1.发布qt程序为了方便调试,在能承受范围内(debug基本不影响性能,打印大概9小时能到50、60GB的数据),本司不会屏蔽其打印输出,以方便现场人员或者客户查看到非日志记录的信息,实时跟踪定位问题。
2.得益于在每个项目设计框架初期考虑各种常规属性预留和打印关键信息的预留,一般查看到打印信息直接远程就能定位问题,所以本司的bug定位+修复问题大多数基本处于5~10分钟一个(从联系我司到处理完成,自行测试到给到客户运行解决,算一个周期)
解决
这就是Qt常规的方法,发布时,可使用屏蔽宏,屏蔽调所有的qDebug和qWarn输出。
在.pro文件中添加宏定义;
DEFINES += QT_NO_WARNING_OUTPUT
DEFINES += QT_NO_DEBUG_OUTPUT
若该文为原创文章,转载请注明原文出处
本文章博客地址:https://hpzwl.blog.csdn.net/article/details/128671382