通常,我喜欢QUrl,但是在代码中包含大量QUrl的情况下调试代码非常麻烦,而且我在调试中看不到实际的url字符串,因此必须在代码中放入toString的一些调试调用。是否有可能使其在调试监视中可见?
最佳答案
我知道这很老了,但是我自己偶然发现了这个问题,并决定以某种方式解决它。至少可以说,该解决方案是粗糙的,但它可以工作。
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<QString*>(reinterpret_cast<char*>(d) + 8)->d->size">{*reinterpret_cast<QString*>(reinterpret_cast<char*>(d) + 8)}://{*reinterpret_cast<QString*>(reinterpret_cast<char*>(d) + 20)}{*reinterpret_cast<QString*>(reinterpret_cast<char*>(d) + 24)}</DisplayString>
<DisplayString>{*reinterpret_cast<QString*>(reinterpret_cast<char*>(d) + 24)}</DisplayString>
<Expand>
<Item Name="[scheme]">*reinterpret_cast<QString*>(reinterpret_cast<char*>(d) + 8)</Item>
<Item Name="[host]">*reinterpret_cast<QString*>(reinterpret_cast<char*>(d) + 20)</Item>
<Item Name="[path]">*reinterpret_cast<QString*>(reinterpret_cast<char*>(d) + 24)</Item>
<Item Name="[query]">*reinterpret_cast<QString*>(reinterpret_cast<char*>(d) + 28)</Item>
</Expand>
</Type>
</AutoVisualizer>
只需将其保存到(例如):
%USERPROFILE%\My Documents\Visual Studio 2013\Visualizers\QUrl.natvis
希望对某人有用。
编辑:
假设您已经安装了其他Qt类型的natvis,尤其是
QString
。关于c++ - 在VS中将QUrl在调试中可视化为字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20401195/