将调试中的QUrl可视化为VS中的字符串

时间:2013-12-05 13:24:00

标签: c++ visual-studio qt debugging

一般来说,我喜欢QUrls,但是在代码中使用大量的QUrls来调试代码很难,我在调试中看不到实际的url字符串,我必须在代码中对toString进行一些调试调用。是否有可能在调试手表中显示它?

2 个答案:

答案 0 :(得分:4)

我知道这已经过时了,但我自己偶然发现了这个问题并决定以某种方式解决它。至少可以说,解决方案是粗糙的,但它确实有效。

QUrl的问题在于它的所有内部都使用了pimpl,而在调试时你无法访问QUrlPrivate的定义。一旦QUrl中的任何内容发生更改,此处的解决方案可能会中断,因为它基于QUrlPrivate成员的偏移量。因此,如果在未来版本中出现任何问题,您可以调整偏移量,并且您会感觉很好。这是Qt 5.3.1的结论

<?xml version="1.0" encoding="utf-8"?>
<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">

    <Type Name="QUrl">
        <DisplayString Condition="reinterpret_cast&lt;QString*&gt;(reinterpret_cast&lt;char*&gt;(d) + 8)->d->size">{*reinterpret_cast&lt;QString*&gt;(reinterpret_cast&lt;char*&gt;(d) + 8)}://{*reinterpret_cast&lt;QString*&gt;(reinterpret_cast&lt;char*&gt;(d) + 20)}{*reinterpret_cast&lt;QString*&gt;(reinterpret_cast&lt;char*&gt;(d) + 24)}</DisplayString>
        <DisplayString>{*reinterpret_cast&lt;QString*&gt;(reinterpret_cast&lt;char*&gt;(d) + 24)}</DisplayString>
        <Expand>
            <Item Name="[scheme]">*reinterpret_cast&lt;QString*&gt;(reinterpret_cast&lt;char*&gt;(d) + 8)</Item>
            <Item Name="[host]">*reinterpret_cast&lt;QString*&gt;(reinterpret_cast&lt;char*&gt;(d) + 20)</Item>
            <Item Name="[path]">*reinterpret_cast&lt;QString*&gt;(reinterpret_cast&lt;char*&gt;(d) + 24)</Item>
            <Item Name="[query]">*reinterpret_cast&lt;QString*&gt;(reinterpret_cast&lt;char*&gt;(d) + 28)</Item>
        </Expand>
    </Type>


</AutoVisualizer>

只需将其保存到(例如):

%USERPROFILE%\My Documents\Visual Studio 2013\Visualizers\QUrl.natvis

希望它对某人有用。

修改

这假设您已安装其他Qt类型的natvis,尤其是QString

答案 1 :(得分:0)

看起来QT VS插件为VS 2012增加了漂亮的打印支持。 从here

获取

您可以在see how QT does it上添加自己漂亮的图片。

natvis文件添加了这个功能。

**编辑** Qt的VS Addin附带的natvis文件仅声明QUrl但不添加打印它所需的natvis代码。感兴趣的用户可以修改此文件以添加QUrl查看功能。