本文へスキップします。

本文へ

【全Qt】
【全・Qt】SRAロゴ
H1

技術記事:GammaRay

技術記事

  • Qtアプリケーション向け内部走査ツール「GammaRay」とは?
    ~ GammaRay 3.0.0リリースでQt 6サポート ~

    (掲載 2023年11月22日)

    プロファイリング

    GammaRay は、Qtの実装を理解することで従来のデバッガを強化し、特にシーングラフ、モデル/ビュー、ステートマシンなどの複雑なフレームワークが関係する場合に、より高いレベルでアプリケーションの動作を視覚化できるようにします。 今回は、最近のバージョンアップによるQt6のサポートといった情報と併せ、GammaRayについてご紹介します。


    GammaRayとは?

    GammaRayは、KDABによって開発されたQtアプリケーション用のソフトウェアイントロスペクションツールです。QObjectのイントロスペクションメカニズムを活用することで、実行時にアプリケーションを観察・操作できるようになります。また、ローカルのワークステーション上でも、リモートの組込みターゲット上でも動作します。

    命令レベルのデバッガが強化されていることで、GammaRayは使用するフレームワークと同じ概念で、より高いレベルで作業できるようになっています。これは、Qt が提供する、モデル/ビュー、ステート マシン、シーングラフといった、比較的複雑な機能に対して特に有効です。

    アプリケーションのバグを解析しようとするとき、通常は命令レベルのデバッガが最初に選択されます。デバッガを使えば、プログラムの流れを追うことができ、オブジェクトや変数の状態を調べることができます。Qt Creatorのように、Qtと適切に統合されたデバッガを使えば、Qt自身のデータ型も正しく扱うことができます。ただし、複雑なフレームワークを扱う場合、このレベルは低レベルになりがちです。大規模なシーングラフで概要を把握したり、モデル/ビュー間の複雑なインタラクションを追跡したりすることが、この方法ではすぐに面倒な作業となるかもしれません。

    GammaRayはこの問題に対処するために、より高いレベルのドメイン固有のデバッグ支援を提供し、QtQuickのシーングラフ、モデル/ビュー、QTextDocument、ステートマシンなど、いくつかのQtフレームワークで見られる複雑な内部構造を簡単にナビゲートできるようにします。GammaRayは、デバッガとは異なりはこれらの内部構造を理解し、意味のある方法で表示することができるため、Qt 開発者には大変重宝されるツールとなっています。

    GammaRay はすべての主要なプラットフォームで利用でき、起動直後からアプリケーションを検査したり、すでに実行中のアプリケーションに接続したりできます。 また、リモート デバッグもサポートしています。これは、組み込みシステムで作業する場合に特に役立ちます。

    なぜGammaRayなのか?

    他にもQObjectのイントロスペクションツールはいくつかあり、GammaRayでもオブジェクトのプロパティ、シグナル、スロット、コネクションを参照したり、ウィジェットの境界やレイアウトのインライン表示が可能になっていますが、Qtが提供する複雑なフレームワークに着目すると、GammaRayの本当の強みが発揮されることが分かります。

    これは、QtQuick2のような非常に視覚的なフレームワークを使用する場合に顕著です。GammarRay は、QtQuickのアイテムツリーを参照することで、概要を把握するのに役立ちます。アプリ内のアイテム選択により、興味のあるアイテムにすばやく移動することができ、専用のレイアウトオーバーレイビューにより、そのアイテムが特定の場所にある理由を理解することができます。関連するすべてのアイテムプロパティにアクセスして編集できるため、その場で変更を試すことができます。また、イベントトレースおよびフォーカスデバッグ機能により、イベント処理の重要な問題を分析可能です。より高度なケースでは、GammaRayはQtQuick2シーングラフのビューも提供します。これは、カスタムアイテムを操作するときに特に役立ち、アイテムのジオメトリの視覚化とシェーダーコードへのアクセスも含まれています。

    ステートマシンもその一例で、グラフィカルなデザインツールがなければ、扱うのが非常に面倒です。もちろん、実行時に生成されたステートマシンコードをデバッグする際にも同じことが言えます。そこで、GammaRayは、UMLのような方法でQStateMachine を視覚化し、現在の状態をライブ表示することができます。また、ステートマシンのすべての遷移をトレースすることもでき、誤作動の分析をサポートします。

    QtQuickが導入されたとはいえ、QtWidgetsやQGraphicsViewのようなQPainterベースの技術は、今後も多くの分野で活用され、GammaRayはこうしたレームワークでの作業をサポートする幅広いツール(QtWidgets用のレイアウトオーバーレイ、すべてのQStyleプリミティブ用のブラウザ、QGraphicsView用のシーングラフビューなど)を提供します。より高度な問題に対しては、レンダリングを分解して、QPainterのすべての操作を個別にステップ実行することも可能です。

    Qtモデル/ビューフレームワークも、ドメインに特化したデバッグツールから大きな恩恵を受けるシステムです。GammaRayを使用すると、ビューに表示されているかどうかに関係なく、アプリケーション内で見つかったQAbstractItemModelの内容を参照することができます。また、プロキシモデルの階層構造や、プロキシモデルチェーンの中間結果も表示できます。最後に、モデル上で使用されているすべての選択モデルを検査することもできます。

    ただし、これで終わりではありません。GammaRayには、QTextDocument用のドキュメントオブジェクトモデルブラウザ、QtScriptとQtWebKitの統合デバッガ、Qtリソースブラウザなど20以上のツールが同梱されています。それでも特定のニーズをカバーできない場合、GammaRayはソースコードで利用できるため、Qtが提供する別のフレームワークや、他ベンダーのコンポーネント、独自のクラスなど、ドメイン固有のデバッグ補助機能を追加するためのプラグインによって拡張できるように設計されています。

    GammaRay 3.0.0リリース

    最近リリースされたGammaRay 3.0.0では、Qt 6のサポートが追加となった他、以下のような変更がありました。

      ● Qt6のサポート
      ● ネットワーク操作でHTTPレスポンスのキャプチャが可能に
      ● コンテキストメニューからオブジェクトをお気に入り追加可能に
      ● プロパティでのQMarginsの変更をサポート
      ● シグナルビューでマウスホイールによるズームが可能に
      ● オブジェクトをフィルタリングすると、自動的にツリーが展開されオブジェクトが選択状態に
      ● オブジェクトの親が再設定される際のクラッシュを修正
      ● シグナルビューにおけるパフォーマンスが大幅に向上
      ● 商用ライセンスが廃止されオープンソースのみでの提供に
      ● 3D Widget Inspector View、VTKベースの Object Visualizerの削除

    Githubにて、GammaRay 3.0.0の変更履歴の参照およびダウンロードが可能です。

    ご利用の際は、KDABのYoutubeチャンネルにてGammaRayチュートリアル動画が公開(パート1~5は日本語付)されていますので、ご活用ください。

    なお、特定のコンポーネントやアプリケーションの可視化、プロファイリング、デバッグの為にGammaRay用のカスタムプラグインをご要望される場合は、KDAB社にて対応が可能です。詳細については、SRAの営業担当もしくは問合せページにご相談いただくか、KDAB日本語ページより直接お問合せください。



    出典:GammaRay™ 【KDAB】  /  GammaRay 3.0.0 is released 【KDAB】
    KDAB日本語トップページ