ブループリント デバッグは、Play In Editor (PIE) または Simulate-In-Editor (SIE) モード中にゲームの実行を一時停止できるようにする強力な機能です。デバッグ時にブレークポイントを使用して、ブループリントまたはレベル ブループリントの任意のグラフをステップ実行することができます。
デバッグ制御
ブループリント デバッガは、PIE および SIE セッション中のゲームの実行を制御します。ゲームが実行されると、ツールバー で制御ができるようになります。デバッグされているブループリントのタイプとデバッグ セッションの現在の状態に応じて、異なるデバッグ制御が表示されます。関係する場合、たとえば ブレークポイント がヒットした場合のみ有効になる制御もあります。
ブループリント エディタ のウィンドウ メニューから開くことができる [Debug (デバッグ)] タブと ブループリント デバッガ でも、PIE または SIE モードがアクティブのときにはコンテキスト依存のデバッグ ボタンが表示されます。
デバッグを有効にする
ブループリントのデバッグを有効にするには、最初にレベル内にあるデバッグ対象のブループリントのインスタンスを指定する必要があります。
ブループリント内で [Debug Object (オブジェクトをデバッグ)] ドロップダウン メニューをクリックしてデバッガで確認したいインスタンスを選択します。
オブジェクトを選択したら虫眼鏡アイコンをクリックすることでレベル内にあるそのオブジェクトにジャンプできます。
別のウィンドウでブループリントを表示した状態でエディタで再生すると、スクリプトが実行されるに従い脈動する「アクティブなワイヤー」があるのがわかります。
前の例では、ポーンのコントローラーに動きを追加するためにブループリントの関数を呼び出す 2 つの Input Axis イベントがあります。左のウィンドウを見ると、ゲーム起動時にスクリプトが実行しているのがわかります (脈動しているワイヤーが赤色の InputAxis Event ノードを離れて Add Controller 入力ノードに入ります)。
ブレークポイント
ブレークポイント は、ブループリント グラフのノードに配置できるマーカーです。PIE または SIE モード中、ブレークポイントを持つノードが実行される直前にゲームが一時停止され、ブループリント エディタのグラフ ビューにあるそのノードに移動します。これにより、変数の値を観察し、ブループリント内の実行の流れを調べたりステップ実行したりすることができます。特定のブループリントのすべてのブレークポイントは [Debug (デバッグ)] タブに表示され、選択するとブループリントのグラフに表示できます。ノードにブレークポイントを配置するには、ノードを右クリックしてコンテキスト メニューから [Add Breakpoint (ブレークポイントを追加)] を選択します。そうすると、赤色の八角形がノードの左上の角に表示されます。ブレークポイントは、ノードを再度右クリック、または [Debug] タブでブレークポイントのエントリを右クリックして [Remove Breakpoint (ブレークポイントを取り除く)] コマンドを選択すれば取り除くことができます。
このブレークポイントは、Jump ノードが実行されるときにゲームを中断します。
完全に削除せずに一時的にブレークポイントを無効にするには、ブループリントのノード自体、または [Debug] タブのブレークポイントのエントリを右クリックして、コンテキスト メニューから [Disable Breakpoint (ブレークポイントを無効にする)] を選択します。無効になったブレークポイントは、赤い八角形の外枠として表示されます。無効なブレークポイントは実行されませんが、簡単に再有効化できます。この方法は、ブレークポイントの削除と再作成を繰り返すよりも便利で、人的ミスも起こりにくくなります。
このブレークポイントは無効になっており、現在は何も動作していませんが、必要に応じて簡単に再有効化できます。
無効化されたブレークポイントを有効化するには、ノードを 右クリック して [Enable Breakpoint (ブレークポイントを有効にする)] を選ぶか、[Debug] タブのブレークポイントの隣のアイコンをクリックしてください。[Debug] タブでブレークポイントを 右クリック して [Enable Breakpoint] を選択しても有効にできます。デバッグ セッション中を含め、いつでもブレークポイントの作成、無効化、有効化、破棄が可能です。ブレークポイントはプロジェクトの .ini ファイルに保存されるので、それらはエディタのセッションの間も持続します。
ブレークポイントが無効な場所に配置されていると、黄色になり「!」が表示されることがあります。ブループリントをコンパイルすると問題が解決する場合があります。それで解決しない場合は、ブレークポイント アイコンの上にマウスカーソルを置くと、警告内容が表示されます。
このブレークポイントは無効であり、動作しません。場合によっては、ブループリントを再コンパイルするとこの問題を解決できます。
ブレークポイントで実行を一時停止すると、エディタがノードをハイライトし、そのノードにフォーカスを当てます。そして、そのノード上に大きな赤い矢印を配置します。
このブレークポイントに到達したところで、実行を一時停止しています。
ウォッチ
ウォッチ は、デバッグ セッションですばやく参照できるように、ブループリント ノード ピンの値を追跡します。ピンでは、ピンを含むノードの前回の実行時に計算された値を保持します。ピンにウォッチを配置するには、ブループリント グラフでピンの名前を右クリックし、コンテキスト メニューで [Watch this value (この値をウォッチ)] を選択します。すでにウォッチしているピンでは、コンテキスト メニューに [Watch this value] ではなく、[Stop watching this value (この値のウォッチを停止)] が表示されます。
ノードがまだ実行されていないピンは、表示できるデバッグ情報がないため、データ値ではなく、その事実を示すメッセージが表示されます。これは、ピンの値が、ノードがその基盤となるコードを実行したときにのみ更新され、ノードが少なくとも 1 回実行されるまで無効になるためです。ブループリントの変数ノードでも、変数の値を取得するためにはコードを実行する必要があります。また、ブループリントの変数ノードは他のノードがそのノードの出力値へのアクセスを試行する場合に限り、コードを実行します。
[Debug] ウィンドウとブループリント デバッガ
[Debug] ウィンドウには、ブレークポイント、ウォッチ、および現在のコード実行トレース スタックが表示されます。このウィンドウには、ブレークポイントを使用する際にコードを停止、再開、ステップ実行できる実行コントロールもあります。タブを使用すると、完全な実行コール スタックとブレークポイント、ウォッチ、特定のブループリント インスタンスのコール スタック情報を切り替えることができます。
ウォッチ ウィンドウ
ブループリント ウォッチ ウィンドウ を使用すると、ウォッチしたいデータにアクセスできるので、デバッグ作業をスピードアップできます。エディタで開いており、現在のコール スタックの一部であるブループリント クラスをウォッチすることができます。実行が一時停止すると、現在のデータが入力された統合コール スタックを表示できます。簡単にブループリント間を移動できるので、プロパティ値やノード出力を調べることができるようになります。このビューは、配列、セット、マップ、その他のデータ構造を拡張することができ、それらに含まれているデータのドリルダウン検索を素早く簡単に行うことができます。また、[Node Name (ノード名)] 列のエントリをクリックしてブループリント クラス中のノードに移動するか、[Object Name (オブジェクト名)] 列のエントリを選択してその特定のオブジェクト インスタンスを選択することもできます。
コール スタック
デバッグ セッション中に使用可能な コール スタック は、ほとんどの C++ 開発環境にあるようなコール スタックと概念が似ています。これは、ブループリント ビジュアル スクリプティング関数とネイティブ (C++) コード関数の間の実行フローを表示します。現在実行されているブループリント ビジュアル スクリプティング関数は、スタックの一番上にあります。
ブループリント マクロはコール スタックに表示されません。代わりに、ブループリント マクロの呼び出し元の関数の一部として表示されます。
前述のブループリント関数は特定のクラスのすべてのアクタを取得し、そのコンポーネントを無効にします。関数の最後にブレークポイントが設定されています。
ブレークポイントに達すると、コール スタックは現在動作中の関数を一覧表示します。先頭にある現在の関数から始めて呼び出し元の関数に向かって下に進みます。つまり、各行のエントリには、そのすぐ下の行に指定されている関数によって呼び出された関数の名前が含まれています。再帰的 (自己呼び出し) 関数の場合、同じ関数名が連続して複数回現れることがあります。
プレイヤーが前述のとおりにカスタム関数「FindActorPressed」を実行したとき、このコール スタックにサードパーソン キャラクターのイベント グラフへの呼び出しが表示されます。これは元々アクタのブループリント グラフから呼び出され、ネイティブ コードのプレイヤー入力コンポーネントから呼び出された FindActorPressed
アクション マッピング イベントに対して順番に応答しています。
コール スタックを表示 (または非表示) にするには、[Blueprint Debugger (ブループリント デバッガ)] ウィンドウを右クリックして、ドロップダウンから [Call Stack (コール スタック)] を選択します。
実行追跡
実行追跡 スタックは、直近に実行されたノードのリストを上部に表示します。
このリストは、デバッグ中にグラフをステップ実行すると更新されます。