2

autoexp.dat の [Visualizer] セクションに QHostAddress のセクションを追加しようとしていますが、QHostAddress のデータは実際には Visual Studio には認識されない QHostAddressPrivate に保持されています (Qt にプライベートであるため)。autoexp.dat で構造体を定義したり、不明なポインタなどをキャストしたりして、内部に保持されている IP アドレスを表示する方法はありますか?

アップデート:

私はこれをいじって、以下のコードを機能させることができました。ただし、いくつかの理由で少し扱いに​​くいです。

  1. キャストを多用しています。構造体を宣言してこれを使用する方がはるかにきれいです。
  2. IPv6 グループは '0x' ヘッダーを持つ 16 進数としてしか表示できないため、アドレスが少し乱雑になります。
  3. IPv4 と IPv6 の両方のデータを子として表示できるようにしたいのですが、「子」セクションで複数の部分を持つ文字列を作成する方法がわかりません。
  4. Visual Studio は、文字列で宣言されている場合でも、IPv6 アドレスでコロンを受け入れません。これを行うと、次のエラーが表示されます。

エラー!Autoexp.dat:line(1687) for 'QHostAddress| ::QHostAddress': #else の最後に ')' が必要です エラー! Autoexp.dat:line(1687) for 'QHostAddress| ::QHostAddress': プレビュー ルールの解析に失敗しました エラー! 'QHostAddress|*::QHostAddress' の Autoexp.dat:line(1687): プレビュー/子ルールの ')' の一致に失敗しました

[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