メイン・コンテンツまでスキップ

デバッグ

TouchGFXアプリケーションは、TouchGFX DesignerやTouchGFX Generatorによって生成され、開発者によって記述されるC++ファイルのセットなので、他のC++アプリケーションと同じようにデバッグすることができます。

ターゲットのデバッグ

IAR Workbench、Keil uVision、またはSTM32CubeIDEなどのIDEを使用している場合、ターゲット上でのデバッグは、そのIDEの使用可能なメカニズムを使用して簡単に実行できます。 TouchGFX Generatorによって生成された、あるいはTouchGFX Board Setupから直接生成されたTouchGFXプロジェクトは、選択したツール・チェーンを使用してすぐにデバッグを実行できます。

評価ボードの立ち上げコードとTouchGFX ALは、ターゲット・ボード上でのみ実行されるので、そこでデバッグする必要があります。 アプリケーションのUI部分は、ターゲット上で、またはシミュレータを使用してデバッグできます。 ターゲット上では、通常はアニメーション速度、更新頻度、応答性などのパフォーマンス問題のような内容をデバッグします。 他のUI固有の問題もターゲット上でデバッグできますが、多くの場合、シミュレータを使用したデバッグの方が高速です。

シミュレータのデバッグ

アニメーションの動き、遷移、要素の更新、プログラム・ロジックといったUI関連の問題のデバッグは、ほとんどの場合、毎回ボードをフラッシュするのではなく、シミュレータを使用してテストおよびデバッグした方が効率的です。

TouchGFXアプリケーションはVisual Studioをサポートしており、このためのプロジェクト・ファイルを維持しています。 Visual Studioを使用して、シミュレータをデバッグ・モードで実行し、IDEのすべてのデバッグ機能を利用することができます。

シミュレータを使用してデバッグする場合、Visual Studioに制限されるわけではありません。 アプリケーションはGCCでコンパイルできるので、別のIDEを使用しているのなら、そのIDEを、GCCでコンパイルされたプロジェクトをデバッグするために設定する可能性が最も高いでしょう。 ただしこのためには、ユーザ自身でIDEを設定する必要があります。

Visual Studioでのデバッグ

DebugPrinterの使用

DebugPrinterクラスは画面上にデバッグ・メッセージを簡単に出力する方法で、TextAreaやその他のウィジェットをスクリーンに追加する必要がありません。 たとえば、バックエンドからのイベント、あるいはFPSやレンダリング時間などの測定値を表示するために使用できます。

DebugPrinterを使用するには、インスタンスを割当てて、Applicationクラスに渡す必要があります。 これは、FrontendApplicationのコンストラクタなどで実行できます。

デバッグ・プリンタはフレームバッファのフォーマットと互換性を持つ必要があります。 次の例では、gui/src/common/FrontendApplication.cppに16 bppのデバッグ・プリンタを追加しています。

#include <gui/common/FrontendApplication.hpp>

#include <platform/driver/lcd/LCD16bpp.hpp>
LCD16DebugPrinter lcd16bppDebugPrinter;

FrontendApplication::FrontendApplication(Model& m, FrontendHeap& heap)
: FrontendApplicationBase(m, heap)
{
lcd16bppDebugPrinter.setPosition(0, 0, 240, 40);
lcd16bppDebugPrinter.setScale(2);
lcd16bppDebugPrinter.setColor(0x00); //black
Application::setDebugPrinter(&lcd16bppDebugPrinter);
}

ここでは、上側の240 x 40ピクセルにDebugPrinterを書き込むように設定しました。
アプリケーションで、以下を使用して文字列を出力できるようになりました。

char debugStringBuffer[30];
void updateDebugString()
{
static int count = 0;
count++;
snprintf(debugStringBuffer, sizeof(debugStringBuffer), "tick: %d", count);
Application::getDebugPrinter()->setString(debugStringBuffer);
Application::invalidateDebugRegion();
}
Note
ASCII 32(スペース)からASCII 126(~)までの文字を使用できます。

DebugPrinterクラス

DebugPrinterインスタンスは、使用するLCDクラスと互換性を持つ必要があります。 次のテーブルには、DebugPrinterクラス名がリストされています。

LCDクラスDebugPrinterクラス
LCD1bppLCD1DebugPrinter
LCD2bppLCD2DebugPrinter
LCD4bppLCD4DebugPrinter
LCD8bpp_ARGB2222LCD8ARGB2222DebugPrinter
LCD8bpp_ABGR2222LCD8ABGR2222DebugPrinter
LCD8bpp_RGBA2222LCD8RGBA2222DebugPrinter
LCD8bpp_BGRA2222LCD8BGRA2222DebugPrinter
LCD16bppLCD16DebugPrinter
LCD16bppSerialFlashLCD16DebugPrinter
LCD24bppLCD24DebugPrinter
LCD32bppLCD32DebugPrinter

使用するLCDクラスと一致するDebugPrinterクラスを使用してください。