我试图在 autoexp.dat 的 [Visualizer] 部分中为 QHostAddress 添加一个部分,但 QHostAddress 中的数据实际上保存在 QHostAddressPrivate 中,Visual Studio 不知道它(因为它是 Qt 私有的)。有没有办法在 autoexp.dat 中定义一个结构,转换一个未知指针或类似的东西,以便我可以显示其中保存的 IP 地址?
更新:
我玩弄了这个并设法让下面的代码工作。但是,由于以下几个原因,它有点笨拙:
- 它使用了大量的铸造。声明一个结构并使用它会更整洁。
- 我只能将 IPv6 组显示为带有“0x”标头的十六进制,这会使地址有点混乱。
- 我希望能够将 IPv4 和 IPv6 数据显示为子项,但我无法弄清楚如何在“子项”部分创建具有多个部分的字符串。
- Visual Studio 不接受 IPv6 地址中的冒号,即使在字符串中声明也是如此。如果我这样做,我会收到错误:
错误!Autoexp.dat:line(1687) for 'QHostAddress| ::QHostAddress':#else 错误结束时应为 ')'!Autoexp.dat:line(1687) for 'QHostAddress| ::QHostAddress': 预览规则解析失败 ERROR!Autoexp.dat:line(1687) for 'QHostAddress|*::QHostAddress': Failed to match ')' for preview/children rule
[Visualizer]
;QT_DEBUG_START
QHostAddress|*::QHostAddress{
preview
(
#(
#if (*((quint32 *)$c.d.d) != 0) (
#("IPv4=", [*(((quint8 *)$e.d.d) + 3), u],
".", [*(((quint8 *)$e.d.d) + 2), u],
".", [*(((quint8 *)$e.d.d) + 1), u],
".", [*(((quint8 *)$e.d.d) + 0), u])
) #elif ((*(((quint32 *)$e.d.d) + 1)) + (*(((quint32 *)$e.d.d) + 2)) + (*(((quint32 *)$e.d.d) + 3)) + (*(((quint32 *)$e.d.d) + 4)) != 0) (
#("IPv6=",
[(quint16)((*(((quint8 *)$e.d.d) + 0x04) << 0x8) | (*(((quint8 *)$e.d.d) + 0x05))), x],
".",
[(quint16)((*(((quint8 *)$e.d.d) + 0x06) << 0x8) | (*(((quint8 *)$e.d.d) + 0x07))), x],
".",
[(quint16)((*(((quint8 *)$e.d.d) + 0x08) << 0x8) | (*(((quint8 *)$e.d.d) + 0x09))), x],
".",
[(quint16)((*(((quint8 *)$e.d.d) + 0x0A) << 0x8) | (*(((quint8 *)$e.d.d) + 0x0B))), x],
".",
[(quint16)((*(((quint8 *)$e.d.d) + 0x0C) << 0x8) | (*(((quint8 *)$e.d.d) + 0x0D))), x],
".",
[(quint16)((*(((quint8 *)$e.d.d) + 0x0E) << 0x8) | (*(((quint8 *)$e.d.d) + 0x0F))), x],
".",
[(quint16)((*(((quint8 *)$e.d.d) + 0x10) << 0x8) | (*(((quint8 *)$e.d.d) + 0x11))), x],
".",
[(quint16)((*(((quint8 *)$e.d.d) + 0x12) << 0x8) | (*(((quint8 *)$e.d.d) + 0x13))), x])
)
)
)
children
(
#(
[d]: [$c.d.d, x]
)
)
}
;QT_DEBUG_END