前言
这个问题是在同事在从数据库读取数据时才发现的。工作使用的环境是VS2015+QtTools+DM8。这里我先把乱码图片粘贴下面。
下面贴出了结构体和测试的源代码以及调试出现的乱码 。 测试环境是 VS2022+QtTools (我在VS2015、VS2019、VS2022均已测试)。
同事的解决方案
他从网上查找好像有类似的问题,别人给出的解决方案是在这个结构体后面加一个非基本类型成员再放入QList数据就正常了。 下面展示我实际测试。
虽然说把结构体修改完后存放到QList中数据就正常了。但是我还是不理解这是为什么。为什么只需要在结构体增加一个非基本类型变量就会影响到QList里面的数据。
当结构体作用域改变时
当天我晚上回来就拿我自己电脑测试。但是我测试时是把这个结构体放到了函数体内。如下图调试结果就发生了改变。在QList里面的数据也正常了。
这时我更加迷惑了但是我发现一个新的点
下面是结构体在函数体外和函数体内调试时的区别。但是我不懂为什么结构体放在函数体内,却不显示list[0]。有大佬懂的可以评论区讲解下。
总结目前发现的俩种解决方案
- 在结构体里底部增加一个非基本类型变量
- 将结构体移到函数内部
当我不调试执行运行它它它它有又变了
前面的所有测试均在调试监视测试的数据。 下面展示结构体分别在函数体内和体外的打印测试结果
初步个人结论
结果意想不到,前面测试结构体在函数体外时在Qlist里面的数据不应该是乱码吗?为什么又正常了?
这时我怀疑可能是Tools的问题。所以直接换环境 拿Qt Ceator4.11.0 测试
Qt测试结果
下面是调试跟踪图。发现数据正常
下面是打印输出结果图 。 数据正常
总结
这个调试存在乱码应该就是QtTools的问题。但是不影响实际的结果内容。