关于在VS+QtTools环境下使用QList<自定义类型>调试存在乱码问题的研究【记录】

简介: 关于在VS+QtTools环境下使用QList<自定义类型>调试存在乱码问题的研究【记录】

前言

这个问题是在同事在从数据库读取数据时才发现的。工作使用的环境是VS2015+QtTools+DM8。这里我先把乱码图片粘贴下面。


下面贴出了结构体和测试的源代码以及调试出现的乱码 。 测试环境是 VS2022+QtTools (我在VS2015、VS2019、VS2022均已测试)。

同事的解决方案

他从网上查找好像有类似的问题,别人给出的解决方案是在这个结构体后面加一个非基本类型成员再放入QList数据就正常了。 下面展示我实际测试。

虽然说把结构体修改完后存放到QList中数据就正常了。但是我还是不理解这是为什么。为什么只需要在结构体增加一个非基本类型变量就会影响到QList里面的数据。

当结构体作用域改变时

当天我晚上回来就拿我自己电脑测试。但是我测试时是把这个结构体放到了函数体内。如下图调试结果就发生了改变。在QList里面的数据也正常了。



这时我更加迷惑了但是我发现一个新的点

下面是结构体在函数体外和函数体内调试时的区别。但是我不懂为什么结构体放在函数体内,却不显示list[0]。有大佬懂的可以评论区讲解下。


总结目前发现的俩种解决方案

  1. 在结构体里底部增加一个非基本类型变量
  2. 将结构体移到函数内部


当我不调试执行运行它它它它有又变了

前面的所有测试均在调试监视测试的数据。 下面展示结构体分别在函数体内和体外的打印测试结果


初步个人结论

结果意想不到,前面测试结构体在函数体外时在Qlist里面的数据不应该是乱码吗?为什么又正常了?

这时我怀疑可能是Tools的问题。所以直接换环境 拿Qt Ceator4.11.0 测试

Qt测试结果

下面是调试跟踪图。发现数据正常

下面是打印输出结果图 。 数据正常

总结

这个调试存在乱码应该就是QtTools的问题。但是不影响实际的结果内容。

目录
相关文章
|
6天前
|
编译器 C语言 C++
【字符串探秘:手工雕刻的String类模拟实现大揭秘】(中)
【字符串探秘:手工雕刻的String类模拟实现大揭秘】
|
6天前
|
存储 编译器
【字符串探秘:手工雕刻的String类模拟实现大揭秘】(上)
【字符串探秘:手工雕刻的String类模拟实现大揭秘】
|
6天前
|
存储 编译器 Linux
【字符串探秘:手工雕刻的String类模拟实现大揭秘】(下)
【字符串探秘:手工雕刻的String类模拟实现大揭秘】
|
8月前
|
存储 SQL 缓存
如何使用 ST05 事物码,快速找到访问指定数据库表的 ABAP 代码试读版
如何使用 ST05 事物码,快速找到访问指定数据库表的 ABAP 代码试读版
69 0
|
8月前
|
IDE 编译器 开发工具
善用 vs 中的错误列表和输出窗口,高效查找 C++ 多工程编译错误
善用 vs 中的错误列表和输出窗口,高效查找 C++ 多工程编译错误
|
9月前
|
编译器 Linux 测试技术
【C/C++】C语言工程转C++工程,去除旧代码中的警告和错误
将 C语言项目转为C++项目更新维护,处理旧代码中的警告和错误
268 0
|
10月前
|
Perl
软件工程——程序编码(程序编码总原则、5个好程序标准、源程序文档化)
当工程规模很大时,而又没有完全合适的语言,可编一个专用的语言
|
10月前
|
运维 测试技术
嵌入式软件测试笔记12 | 什么是状态转换测试?如何开展?
嵌入式软件测试笔记12 | 什么是状态转换测试?如何开展?
126 0
|
开发框架 JSON 数据库
FastAPI 学习之路(十二)接口几个额外信息和额外数据类型
FastAPI 学习之路(十二)接口几个额外信息和额外数据类型
FastAPI 学习之路(十二)接口几个额外信息和额外数据类型
|
Shell Windows
缺少对象 WScript 问题解决方法
方法一: 先把脚本保存起来(保证你的脚本能正确运行),例如命名为test.vbs 然后在QTP写以下脚本就可以正确运行了! Dim oShell Set oShell =CreateObject ("WSCript.shell") oShell.run "cmd /K wscript e:\test.vbs" Set oShell = Nothing    方法二: 首先要明白 WScript.CreateObject 和 CreateObject 的区别。
2181 0