关于在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月前
|
自然语言处理 IDE 开发工具
利用codeGeex在IDE中自动写注释、自动补充简单编码。
利用codeGeex在IDE中自动写注释、自动补充简单编码。
209 2
|
5月前
技术心得记录:单片机开发过程中使用结构体简化程序
技术心得记录:单片机开发过程中使用结构体简化程序
30 0
|
6月前
|
安全 API 数据安全/隐私保护
使用Python操纵Word自动编写离职报告
使用Python操纵Word自动编写离职报告
45 0
|
存储 NoSQL 程序员
试试 python-dotenv,避免敏感信息被硬编码到代码中
试试 python-dotenv,避免敏感信息被硬编码到代码中
213 0
|
编译器 Linux 测试技术
【C/C++】C语言工程转C++工程,去除旧代码中的警告和错误
将 C语言项目转为C++项目更新维护,处理旧代码中的警告和错误
477 0
|
传感器 IDE 程序员
Python 代码智能感知 —— 类型标注与特殊的注释(所有人都需要知道)
Python 代码智能感知 —— 类型标注与特殊的注释(所有人都需要知道)
232 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 的区别。
2343 0