QModbusTcpClient发生内存泄漏

问题现象 之前公司内使用的Qt版本均为5.13,后期因为这个版本不是LTS,还有更新的Chromium所以向上升级到了5.15.X(然而开源版...

八月 24, 2022 · 猫贩子薛定谔

GitLab CI使用Googletest自动化单元测试Qt代码

GoogleTest简介 GTest框架谷歌推出的一款C++单元测试框架,基于BSD3协议开源。因为是C++,所以基本上兼容所有系统。 QT项目集成GTest QT Creator自带的Test集成插件可以快速帮助集成QTest或者GTest,虽然QTest是QT自带的测试框架,但是我还是更喜欢使用纯C++的东西。 新建项目->其他项目->Auto Test Project->配置项目TestCase TestSuit->选择GTest根目录 这就是一个完整可以运行的项目了,运行可以看见测试结果。 需要添加新的测试用例可以通过新建测试用例进行测试 TEST(TestSuit,TestCase){ // do some test } 根据自己项目的需求include被测项目header和cpp文件,这样可以将测试代码和要测试的代码一起编译导出。 当然如果被测项目是一个库的话,也是可以使用链接动态库的方式链接,但是这样就无法从单元测试结果获取测试代码覆盖率和分支覆盖率等信息。 如果需要那些信息的话还是建议和单元测试一起编译运行。 ...

六月 23, 2020 · 猫贩子薛定谔

QT使用Breakpad

在c++开发中,很容易出现程序Crash而不出现任何提示的情况,尤其是在使用原生c++开发的情况,如果用了QT之类的框架还可能会输出一点点线索(也可能没有),在引入dump之前,我们都是用断点的方式debug,但是一旦发布出去,那就只能打印整个流程的所有log,来“云”调试。 所以为了解决收集和调试发布之后的程序,需要收集程序崩溃之后的信息,微软在其Windows平台上提供了minidump,需要引用WinDbg的库,注册handler也可以生成,但是这一套方案不是特别好用,而且也不能跨平台,所以Breakpad是比较好的第二方案。 Breakpad Breakpad是谷歌开源的一个跨平台崩溃处理框架,内含崩溃转储、上报、分析一套工作流程框架。 主要的工作流程为:client以library的方式嵌入自己的程序,并设置handler,将会在程序崩溃时将会把一系列的线程列表、调用堆栈和一些系统信息写入minidump文件,再使用dump_syms将编译器生成的调试信息文件生成符号文件,最好在使用minidump_walker生成可以阅读的stack trace。 ...

五月 14, 2020 · 猫贩子薛定谔

QML连接MySQL数据库

QT 5.X以上的版本集成了多种数据库的驱动 QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QODBC QODBC3 QPSQL QPSQL7 大部分情况只需要QT继承的库就可以完成数据库操作。 小坑 然而在使用Qt createor mingw时会出现无法载入驱动QSqlDatabase: QMYSQL driver not loaded的提示,出现这种情况的原因是Mingw的版本与驱动libmysql.dll不兼容。所以使用VS的情况下能够与Mysql成功连接。 默认安装的mingw都是32位,然而mingw内自带驱动却为64位,如果安装64位的MySQL得到的也是64位,因此需要下载32位的驱动放到mingw的bin目录下。这里提供我使用的版本 MySQL官网下载到的dll为400多kb与MySQL安装路径下的dll同样的大小,也无法成功连接,不知道是不是需要自己再编译一次? ...

八月 8, 2018 · 猫贩子薛定谔