Lua をデバッグする

プログラミングにおいて確実に言えることが 1 つだけあります。それは、バグがあるということです。Lua で設定するプロジェクトの動作が多くなるほど、バグの数は多くなります。

もちろん、バグをそのままにしておく必要はありません。デバッガを使用して有害なバグを見つけ出し、駆除することにより、問題を食い止めることができます。

Visual Studio Code の実行について

Stingray Lua コードをデバッグする最善の方法は、無償でオープンソースの Visual Studio Code エディタ用にオートデスクが提供している拡張機能を使用することです。この拡張機能を使用すると、エンジンの実行中のインスタンスへの Visual Studio Code の接続、ブレークポイントの設定、コード内のトレース、エンジンへのコンソール コマンドや Lua スニペットの送信などを行うことができます。

デバッガの使用方法を既に理解している場合は、この拡張機能のホームページにアクセスして、設定方法や使用方法についての詳細を確認してください。

デバッグの基本

初心者プログラマにとって、コードの記述はそれだけで十分に不安なタスクです。多くのプログラマは、ツールを使ってコードをデバッグする方法を学ぶのを嫌がり、代わりにデバッグ メッセージをプリントするなど、コードからフィードバックを得る「シンプルな」方法に集中しています。

しかし、デバッグ ツールを効果的に使用する方法を学ぶことは、有益な投資です。問題の切り分けにおいてはるかに効率的であるだけでなく、今後同じようなバグを回避するのに役立つ考え方やコード記述習慣が推進されます。

プログラミング自体と同様に、デバッグは、任意の場所を調べるのではなく、構造化された方法で問題にアプローチする場合に最もうまくいきます。まずコードについて仮説を立てて、デバッグ ツールを使用してこれらの仮説をテストします。たとえば、問題はどこに存在すると考えられるだろうか?それはなぜだろうか?問題がそこで発生したかしないかをどうやったら確認できるだろうか?コードによってどのような前提条件が生成されるだろうか?その前提条件が本当に有効かどうか、どうやったら確認できるだろうか?

自身にこのような質問をすることで、予想する結果が実際に取得する結果から逸脱しているポイント、およびその理由を見つけることに集中できます。

デバッグのワークフロー

デバッガを使用してコードの問題を追跡する際は、一般的に以下に示す 3 つの主要な手順に従います。

  1. 実行を一時停止します。

    ゲームでは、ユーザがフォローできるよりはるかに速く Lua コードが評価されます。考えたり調べたりする時間をとるために、ゲームを一時停止または中断する必要があります。

    通常、Lua スクリプトの特定行に「ブレークポイント」と呼ばれるマーカーを設定して、ゲームを一時停止します。Visual Studio Code でこの操作を行うには、中断するコードが含まれている Lua ファイルを開き、行番号の横の左余白内でクリックします。ゲームで Lua スクリプトが実行され、その行に達すると、ゲームは自動的に一時停止されます。

    また、エンジンに接続しているときに Visual Studio Code のデバッグ ツールバーで一時停止アイコンをクリックすると、実行中のゲームをいつでも一時停止することができます。

  2. コードを調べます。

    ゲームの中断中、Lua 環境の状態に関する情報にアクセスできます。デバッグ タブの Variables セクションを参照するか、またはコード エディタ ビューでローカル変数の上にカーソルを置くことによって、ローカル変数に割り当てられている値を確認することができます。

    ローカル変数を変更し、変更された値を使用して、ゲームを続けることができます。また、一時停止中にコード エディタでスクリプトを変更し、ゲームに再ロードすることもできます。「Lua コードを再ロードする」も参照してください。

  3. 進めます。

    1 つのブレークポイントのコードの状態から実行できるすべてを学習した後は、別のブレークポイントに到達するためのいくつかのオプションがあります。

    スクリプトを 1 ステップずつ逐次実行し、一度に 1 行ずつ実行してそれぞれの後に一時停止できます。1 ステップずつ実行している場合は、現在の関数まで下降するのか、それとも次の行までステップ オーバーするのかを選択できます。続行することもできます。この場合、次のブレークポイントがヒットするか、もう一度ゲームを一時停止するまで、ゲームの通常のフローが再開されます。

    デバッグ中は、Visual Studio Code に浮動ツールバーが開き、これらの動作をコントロールできます。

問題を特定および解決できない場合は、新しい仮説を作成して再度テストします。

その他のデバッグ方法

ゲーム内の Lua 環境から情報を取得するための他の方法に興味がある場合は、「ランタイムのフィードバックを取得する方法」を参照してください。このトピックでは、Lua print ステートメントと Stingray ランタイム Lua の API 関数を使用して、Log Console パネルにメッセージを送信する方法について説明します。

デバッグおよびビルドの環境設定

エンジンをデバッグできるのは、dev 環境設定で実行されている場合のみです。エンジンの release 環境設定はパフォーマンスおよびセキュリティの面で最適化されており、デバッガがエンジンとメッセージを交換するために利用しているコンソール接続は除去されています。

つまり、デバッグできるのは次の場合になります。

次の場合は、デバッグできません。

関連項目