Visual Studio 2012和Qt4.8.5:如何在调试模式下查看QString的内容。

19

我使用的是Visual Studio 2012和Qt4.8.5,但很不幸,在调试模式下无法看到QString文本变量。有人能提供一个提示来解决这个问题吗?因为VS2012不存在Qt4.8.5插件。

非常感谢。

Xavier

6个回答

26

有一个快速明确的解决方案(MSVC本地,无需插件或设置.dat文件),请查看我的答案

假设您有 QString strQt4),然后在调试器监视窗口中添加:

((str).d)->array,su 

附录,su告诉调试器将数据解释为Unicode和空终止字符串。

注意:对于QString str,如果使用Qt5,它可以是

(char*)str.d + str.d->offset,su

获取中:-var-create:无法创建变量对象 - hfrmobile
1
谢谢,Qt5选项((char*)str.d + str.d->offset,su)帮了我。 - Vadixem

8

只有当您将调试器选项设置为“启用本机编辑和继续”时,才会使用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 &gt;= 0" Name="[size]">d->size</Item>
        <Item Condition="d->size &gt; 0" Name="[referenced]">d->ref._q_value</Item>
        <ArrayItems Condition="d->size&lt;=25">
            <Size>d->size</Size>
            <ValuePointer>d->data,c</ValuePointer>
        </ArrayItems>
        <ArrayItems Condition="d->size&gt;25">
            <Size>25</Size>
            <ValuePointer>d->data,c</ValuePointer>
        </ArrayItems>
        <Item Condition="d->size&gt;25" Name="...">d->size - 25</Item>
    </Expand>
</Type>

至少qt4.natvis和qt5.natvis可以共存,因为其中一个无法正确加载...


太好了!调试器选项已设置为“启用本地编辑和继续”,natvis文件也起作用了!谢谢。 - xavSIB
VS2015中的autoexp.dat仍然是一个类似INI文件的格式....完全没有XML...我错过了什么吗? - hfrmobile

6


对于Visual 2015、2017和2019版本,
只需安装专用的Qt插件即可。
这里下载。


3

在Qt5和Visual Studio 2012中,我只需要这样做:

项目选项 -> 调试 -> 调试器类型 -> 将其从自动设置为混合。

现在可以在监视窗口中显示字符串了。


3
嗨,这个设置不在项目属性里。请前往“工具”菜单 -> “选项” -> “调试” -> “编辑并继续”。勾选“原生编辑并继续”即可。 - xavSIB

1

针对Visual Studio 2015...

工具 > 选项 > 调试 > 通用 > 勾选"使用本机兼容模式"


0

对我而言,这适用于 QString qStr:

p qStr.toStdString();

我在命令行中执行了这个操作(在 Visual Studio 中可用),在 gdb 和 lldb 中也可以运行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接