2

我试图在 autoexp.dat 的 [Visualizer] 部分中为 QHostAddress 添加一个部分,但 QHostAddress 中的数据实际上保存在 QHostAddressPrivate 中,Visual Studio 不知道它(因为它是 Qt 私有的)。有没有办法在 autoexp.dat 中定义一个结构,转换一个未知指针或类似的东西,以便我可以显示其中保存的 IP 地址?

更新:

我玩弄了这个并设法让下面的代码工作。但是,由于以下几个原因,它有点笨拙:

  1. 它使用了大量的铸造。声明一个结构并使用它会更整洁。
  2. 我只能将 IPv6 组显示为带有“0x”标头的十六进制,这会使地址有点混乱。
  3. 我希望能够将 IPv4 和 IPv6 数据显示为子项,但我无法弄清楚如何在“子项”部分创建具有多个部分的字符串。
  4. 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
4

0 回答 0