【发布时间】:2020-06-03 22:55:06
【问题描述】:
我使用 Visual Studio 2012 和 Qt4.8.5,不幸的是,当我在调试模式下工作时,我看不到 QString 文本变量。有人有小费允许吗? VS2012不存在Qt4.8.5插件。
非常感谢
泽维尔
【问题讨论】:
标签: visual-studio-2012 visual-studio-debugging qt4.8
我使用 Visual Studio 2012 和 Qt4.8.5,不幸的是,当我在调试模式下工作时,我看不到 QString 文本变量。有人有小费允许吗? VS2012不存在Qt4.8.5插件。
非常感谢
泽维尔
【问题讨论】:
标签: visual-studio-2012 visual-studio-debugging qt4.8
有一个快速而明确的解决方案(MSVC 原生,不需要插件也不需要设置 .dat 文件),see my answer from here
假设你有QString str (Qt4),然后添加到调试器监视窗口:
((str).d)->array,su
附录 ,su 告诉调试器将数据解释为 unicode 和以空字符结尾的字符串。
注意:对于 Qt5 QString str 可能是
(char*)str.d + str.d->offset,su
【讨论】:
除非您将调试器选项设置为“启用本机编辑并继续”,否则不会使用 autoexp.dat
这是我 4.8.5 的 QString 的 natvis 实现(仅扩展前 25 个字符)
<Type Name="QString">
<DisplayString>"{d->data,sub}"</DisplayString>
<StringView>d->data,sub</StringView>
<Expand>
<Item Condition="d->size >= 0" Name="[size]">d->size</Item>
<Item Condition="d->size > 0" Name="[referenced]">d->ref._q_value</Item>
<ArrayItems Condition="d->size<=25">
<Size>d->size</Size>
<ValuePointer>d->data,c</ValuePointer>
</ArrayItems>
<ArrayItems Condition="d->size>25">
<Size>25</Size>
<ValuePointer>d->data,c</ValuePointer>
</ArrayItems>
<Item Condition="d->size>25" Name="...">d->size - 25</Item>
</Expand>
</Type>
至少 qt4.natvis 可以与 qt5.natvis 共存,因为其中一个或另一个无法正确加载...
【讨论】:
对于 Visual 2015、2017 和 2019,
只需为 Visual 安装专用的 Qt 插件。
从here下载
【讨论】:
对我来说,在 Qt5 和 Visual Studio 2012 中,我只是这样做了:
项目选项 -> 调试 -> 调试器类型 -> 设置它从自动到混合。
手表中不显示字符串。
【讨论】:
对于 Visual Studio 2015...
工具>选项>调试>常规>勾选“使用本机兼容模式”
【讨论】: