Qt Creatorの診断ツールプラグイン

良い一日。 最近、RAM使用量に関するデータを視覚化し、現在実行中のプロセスによってCPUをロードするように設計された、Qt Creator開発環境用のシンプルだが機能的なプラグインを作成するというアイデアを得ました。 私のインスピレーションとして、Visual Studioに存在する「診断ツール」ツールキットが役立ちました。 以下に、主な開発の詳細について説明します。









Qt Creatorのプラグインを作成するトピックは、たとえばQt Creator Extensions Systemの記事でHaberで既に詳細に説明されているため、一般的な情報については説明せず、プラグインの説明に直接進みます。



実際、オペレーティングシステムで実行されているプロセスに関する情報を取得するには、まずその識別子(PID)を見つける必要があります。 Qt Creatorを介して起動されたプロセスのPIDを取得する問題は、最初に対処しました。 このトピックのグーグル検索に失敗した後、Qt Creatorのソースコードを調査しました。その間に、必要なデータを見つけることは難しくないことがわかりました。 これを行うには、ProjectExplorer :: ProjectExplorerPlugin :: instance()の静的インスタンスによって発行される次の信号をキャッチする必要があります。

void runControlStarted(ProjectExplorer :: RunControl * rc);

void runControlFinished(ProjectExplorer :: RunControl * rc);


// connects connect(ProjectExplorer::ProjectExplorerPlugin::instance(), &ProjectExplorer::ProjectExplorerPlugin::runControlStarted, this, &DiagnosticToolsPlugin::onRunControlStarted); connect(ProjectExplorer::ProjectExplorerPlugin::instance(), &ProjectExplorer::ProjectExplorerPlugin::runControlFinished, this, &DiagnosticToolsPlugin::onRunControlFinished); // slots void DiagnosticToolsPlugin::onRunControlStarted(ProjectExplorer::RunControl *rc){ m_runControlPtr = rc; connect(m_runControlPtr, &ProjectExplorer::RunControl::applicationProcessHandleChanged, this, &DiagnosticToolsPlugin::onApplicationHandleChanged); } void DiagnosticToolsPlugin::onRunControlFinished(ProjectExplorer::RunControl *rc){ Q_UNUSED(rc) m_runControlPtr = NULL; m_dataQueryEngine->stopDataQuery(); } void DiagnosticToolsPlugin::onApplicationHandleChanged(){ if (m_runControlPtr->applicationProcessHandle().isValid()){ m_dataQueryEngine->setPid(m_runControlPtr->applicationProcessHandle().pid()); m_dataQueryEngine->startDataQuery(); } else { qDebug() << "Process handle is invalid"; } }
      
      





runControlStartedシグナル(ProjectExplorer :: RunControl * rc)を受信したら、m_runControlPtrがProjectExplorer :: RunControl * rcオブジェクトを指すようにし、applicationProcessHandleChangedシグナルを使用してデータリクエストを実行することを忘れないでください。



次のタスクは簡単でした。 Windowsオペレーティングシステムでは、プロセスで使用されるメモリとCPUのロードに関する情報は、LinuxのWinApiを介して取得されました-/ proc / pid / statおよび/ proc / statファイルの内容を分析することにより。



最後の仕上げは、収集された情報の視覚化です。 最初に考えたのはQtモジュールを使用してQt Chartsチャートを作成することでしたが、このコンポーネントはすぐに使用できるQt Creatorの一部ではなく、解決するタスクが単純であるため、チャート用に独自のクラスを実装することが最終的に決定されました。 GUIでの作業を終えた後、作成したグラフィックフォームを配置する場所について考え始めました。 一方では、他の出力パネルと一緒に下に配置するのが論理的です。他方では、アプリケーションの出力と、それによって使用されるコンピューターリソースに関する情報の両方を確認したいと思います。 したがって、左側のパネルにグラフィックフォームを配置するという強い意志(おそらく失敗)が決定されました。 そして、最終的に何が起こったのか:









おわりに

この記事では、現時点ですでに行われていることを説明しています。 次に、Mac OS用のバージョンを作成し、ポーリング間隔、グラフのステップ、色などを設定する機会がある設定ウィンドウを追加する予定です。誰かが改善のための他のアイデアを投げるでしょう。 ソースコードを表示して、プラグインをここからダウンロードします。



ご清聴ありがとうございました。



UPD

記事はクレプバーのコメントを考慮して編集されました



All Articles