我使用的是Visual Studio 2012和Qt4.8.5,但很不幸,在调试模式下无法看到QString文本变量。有人能提供一个提示来解决这个问题吗?因为VS2012不存在Qt4.8.5插件。
非常感谢。
Xavier
我使用的是Visual Studio 2012和Qt4.8.5,但很不幸,在调试模式下无法看到QString文本变量。有人能提供一个提示来解决这个问题吗?因为VS2012不存在Qt4.8.5插件。
非常感谢。
Xavier
有一个快速明确的解决方案(MSVC本地,无需插件或设置.dat文件),请查看我的答案
假设您有 QString str
(Qt4),然后在调试器监视窗口中添加:
((str).d)->array,su
附录,su
告诉调试器将数据解释为Unicode和空终止字符串。
注意:对于QString str
,如果使用Qt5,它可以是
(char*)str.d + str.d->offset,su
只有当您将调试器选项设置为“启用本机编辑和继续”时,才会使用autoexp.dat。
这是我对QString 4.8.5的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可以共存,因为其中一个无法正确加载...
在Qt5和Visual Studio 2012中,我只需要这样做:
项目选项 -> 调试 -> 调试器类型 -> 将其从自动设置为混合。
现在可以在监视窗口中显示字符串了。
针对Visual Studio 2015...
工具 > 选项 > 调试 > 通用 > 勾选"使用本机兼容模式"
对我而言,这适用于 QString qStr:
p qStr.toStdString();
我在命令行中执行了这个操作(在 Visual Studio 中可用),在 gdb 和 lldb 中也可以运行。