ソフトウェア開発者であれば時折、アプリケーションが期待通りに動作しない原因を調査しなければならないことがあります。そのような場合、一般的にはトレース出力を追加するか、プロファイラを使用することが推奨されます。
Qt の開発を行っている場合は、Qt に組み込まれているトレースフレームワークを利用できます。Q_TRACE_* マクロは Qt Core, Gui, Widgets, OpenGL, Qml, Quick, そして Quick3D の各モジュール全体に組み込まれています。
Qt の configure スクリプトには、次のオプションがあります:
-trace [backend] ..... Enable instrumentation with tracepoints.
Currently supported backends are 'etw' (Windows),
'lttng' (Linux), 'ctf' (Common Trace Format, cross-platform)
or 'yes' for auto-detection. [no]
ctf (Common Trace Format) バックエンドは、Qt 6.5 で追加されました。
Qt Creator 21 の Profile モード
私は -trace ctf の configure パラメータを指定して Qt 6.12 を Release with Debug Information 構成でビルドし、それを Qt Creator に登録しました。
以下は、Basic Drawing Example を Qt Tracepoints バックエンドで実行している様子です。
ユーザーアプリケーションでの Qt Tracepoints
Qt Creator では、この Qt 内部のトレースフレームワークを自分自身の Qt アプリケーションでも利用できます。
Basic Drawing Exampleでは、ペイント処理にどれくらいの時間がかかっているのかを知りたいとします。
Qt Creator 21 には、そのための利用を容易にする Wizard と Quick Fix が含まれています:
- CMake のひな型コードを設定する
- C++ コードへトレースマクロを挿入する
Qt Tracepoints の内部実装
前述のとおり、Qt Tracepoints API は内部 API です。しかし、Artificial Intelligence の助けを借りて、その概要を以下にまとめました。: Instrumented Tracing in Qt — the CTF backend (-trace ctf)
Feedback
Qt Tracepoints APIや IDE に対して、皆さんはどのような機能を期待しますか?ぜひ下のコメント欄でご意見をお聞かせください。