10

QML をデバッグ/プロファイリングできるようにアプリでコンパイルするには、どのソフトウェア Qt/QML ピースが必要ですか?

私の現在のアプリは cmake を使用してビルドされ、組み込みデバイスで実行されます。さらに、Qt 4.8.3 (今までは 4.7.0) を使い始めています。

これらのファンシー/クールな機能を使用したいと思います(組み込み開発者向け):

http://doc.qt.digia.com/qtcreator/creator-qml-performance-monitor.html

助けを求めてqt-projectを検索しましたが、カスタマイズされたビルド環境でリモートアプリをデバッグ/プロファイリングするときに必要な手順がわかりません。

したがって、次の手順のいずれかが必要かどうか、また必要な場合は、実際に必要なコードは何かを知りたいです。

  • Qt ライブラリ./特定のオプションを構成します。
  • リモート アプリにアタッチ/起動するための QtCreator 固有のオプション。
  • 最終的なアプリの実行可能ファイルに必要な Cmake のインクルードとライブラリ。

ヘルプ、リンクなどは大歓迎です。

4

5 に答える 5

12

Qt 4.8 では、これはかなり簡単になりました。必要なライブラリはすべて Qt 自体の一部になり、Qt バージョンのデバッグ ライブラリを自分でビルドする必要はありません。

私は CMake で構築された Qt/QML デスクトップ アプリケーションを開発しています。QML デバッグを有効にするには、次の手順を完了する必要がありました。

  1. デバッグ イネーブラーをアプリケーションのスタートアップ コードに含める

      #include <QtDeclarative/qdeclarativedebug.h>
    
      /* [...] */
    
      QDeclarativeDebuggingEnabler enabler;
    
  2. QML_DISABLE_OPTIMIZER=1アプリケーションの実行環境に追加

    これは、Qt Creator 内のプロジェクト ページの実行タブで実行できます。

  3. 実行タブにもあるQMLデバッグのチェックボックスにチェックを入れます

    これにより、Qt Creator とアプリケーションに埋め込まれた QML デバッガー コンポーネント間の通信に必要なコマンド ライン パラメーターが追加されます。

すべてがうまくいった場合、デバッグ モードで起動すると、アプリケーションは次の出力を返します。

Qml デバッグが有効になっています。安全な環境でのみ使用してください。
QDeclarativeDebugServer: ポート 3768 で接続を待機しています...
QDeclarativeDebugServer: 接続が確立されました

その後、ブレークポイントを設定して変数を調べることができました。また、分析ページからアクセスできるプロファイラーも機能しました。

組み込みアプリケーションを開発しているため、ケースは明らかにもう少し複雑です。

Qt Creator は、組み込みプラットフォームでの CMake ベースのプロジェクトの展開と実行をサポートしていません。あなたはそれを自分でしなければならないでしょう。QML デバッグを構成するために、必要な引数をアプリケーションに渡すことを忘れないでください。

$ your-app -qmljsdebugger=port:3768,block

プロファイリング セッションのために Qt Creator をリモートで実行中のアプリケーションにアタッチするには、Qt Creator のメイン メニューの [分析] メニューにある対応する [外部] エントリを使用します。「Debug」>「Debug」の下の「Connect to Debug-Server」を使用してデバッグするための同様のオプションはどこにありますか。

于 2012-11-18T12:15:43.113 に答える
7

私は Qt 5 を使用していますが、さらに簡単になりました。私の側では、QML プロファイリングを行うために、この 1 つのステップだけが必要でした。

#include <QQmlDebuggingEnabler>

...

QQmlDebuggingEnabler enabler;
于 2013-08-09T16:15:50.693 に答える
3

これは、 @ sebasgoの回答、項目1の「よりクリーンな」代替です。

QT_QML_DEBUGQtQuick2 で Qt5 を使用している場合、いくつかのファイルに含める前に定義するだけで済みQtQuickます (実行可能ファイルの一部である限り、どのファイルでもかまいません)。たとえば、次のmain.cpp行で開始するだけで十分です。

#define QT_QML_DEBUG
#include <QtQuick>

代わりにコンパイラの-DQT_QML_DEBUGフラグを (qmake DEFINESまたは cmake add_definitionsディレクティブを介して) 使用しても問題はありません。デバッグ ビルドでのみ可能です。

レガシー QtQuick1 (Qt5 または Qt4 のいずれか) に行き詰まっている場合はQT_DECLARATIVE_DEBUG、代わりにマクロを使用します。

#define QT_DECLARATIVE_DEBUG
#include <QtDeclarative>

好奇心旺盛な方のために、関連する Qt のソースを以下に示します。

于 2013-06-16T16:16:56.787 に答える
-2

Qt 5.1 では、新しい関数qInstallMessageHandlerが追加されました。エラーや警告をキャッチしてログに記録できるので、好きなように対処できます。

于 2013-07-22T16:59:55.960 に答える